使用 hibernate 减少列数
我有一个包含 11 列的表,但我只需要在应用程序中获取其中的 2 列,我使用的是 spring/hibernate/DAO 组合。现在我有一个包含所有 11 个字段的域类,以及映射表中所有 11 列的映射文件。我如何使用只获取其中 2 个而不是全部?
I have a table with 11 columns, but I need to get only 2 of them in my application, I'm using spring/hibernate/DAO combination. For now I have a domain class which includes all 11 fields, and mapping file which maps all 11 columns in table. How do I use get just 2 of them not all?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
要么:
使用投影 - 优点:无需添加 - 缺点:类型不安全(结果是行的
List
,其中每行都是一个Object[])
:使用SELECT 子句中的构造函数表达式(指定的类不需要是实体或映射到数据库) - 优点:类型安全的解决方案 - 缺点:更多类,除非您重用
FatEntity
作为持有者在这种情况下,许多字段将为null
:请注意,如果在
SELECT NEW
子句中指定了实体类名称,则生成的实体实例将处于new状态(无持久标识)。使用映射到同一个表上的另一个实体,仅包含必填字段 - 优点:这是一个可以修改和更新的真实实体 - 缺点:更多类。
来自 LightEntity 的
#2 和 #3 之间的主要区别是:
2 根本不要求持有者是实体。
Either:
Use projections - Pro: nothing to add - Con: Not typesafe (the result is a
List
of rows where each row is anObject[])
:Use a constructor expression in the SELECT clause (the specified class is not required to be an entity or to be mapped to the database) - Pro: typesafe solution - Con: More classes, unless you reuse
FatEntity
as holder in which case many fields will benull
:Note that if an entity class name is specified in the
SELECT NEW
clause, the resulting entity instances are in the new state (no persistent identity).Use another entity mapped on the same table with only the required fields - Pro: It's a real entity that you can modify and update - Con: More classes.
The main differences between #2 and #3 are:
2 doesn't require the holder to be an entity at all.
尝试:
您甚至可以这样做:
获取实体描述列表。
Try:
You can even do :
to get a list of entity descriptions.
如果您不需要的表的列数超过这 2 列,您可以更改休眠映射以仅将这 2 列需要的列映射到实体类。仅映射您想要在应用程序中访问的那些表列。请记住,“忽略”列上的数据库约束可能会被违反,例如非空约束、外键或唯一约束。
If you never need more than those 2 columns of the table, you could change your hibernate mapping to map only those 2 needed columns to the entity class. Only map those table columns you want to access in your application. Keep in mind, that database constraints on the "ignored" columns can be violated like not null constraints, foreign keys or unique constraints.