使用 hibernate 减少列数

发布于 2024-08-27 12:50:46 字数 132 浏览 4 评论 0原文

我有一个包含 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

晚风撩人 2024-09-03 12:50:46

要么:

  1. 使用投影 - 优点:无需添加 - 缺点:类型不安全(结果是行的 List,其中每行都是一个Object[])

     从 FatEntity f 中选择 f.foo, f.bar
    
  2. 使用SELECT 子句中的构造函数表达式(指定的类不需要是实体或映射到数据库) - 优点:类型安全的解决方案 - 缺点:更多类,除非您重用 FatEntity 作为持有者在这种情况下,许多字段将为 null

     从 FatEntity f 中选择 new com.acme.FatEntityDetails(f.id, f.foo, f.bar)
    

    请注意,如果在SELECT NEW子句中指定了实体类名称,则生成的实体实例将处于new状态(无持久标识)。

  3. 使用映射到同一个表上的另一个实体,仅包含必填字段 - 优点:这是一个可以修改和更新的真实实体 - 缺点:更多类。

    来自 LightEntity 的

    
    

#2 和 #3 之间的主要区别是:

  • 2 根本不要求持有者是实体。

  • #2 中的持有者可以是映射到另一个表上的实体。
  • 如果#2 返回实体,则它们处于新状态(这可能是问题,也可能不是问题)。

Either:

  1. Use projections - Pro: nothing to add - Con: Not typesafe (the result is a List of rows where each row is anObject[]):

     select f.foo, f.bar from FatEntity f
    
  2. 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 be null:

     select new com.acme.FatEntityDetails(f.id, f.foo, f.bar) from FatEntity f
    

    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).

  3. 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.

     from LightEntity
    

The main differences between #2 and #3 are:

  • 2 doesn't require the holder to be an entity at all.

  • the holder in #2 could be an entity mapped on another table.
  • if #2 returns entities, they are in a new state (this might be a problem, or not).
兔姬 2024-09-03 12:50:46

尝试:

SELECT myEntity.one, myEntity.two FROM MyEntity myEntity

您甚至可以这样做:

SELECT new MyEntityDescription(myEntity.one, myEntity.two) FROM MyEntity myEntity

获取实体描述列表。

Try:

SELECT myEntity.one, myEntity.two FROM MyEntity myEntity

You can even do :

SELECT new MyEntityDescription(myEntity.one, myEntity.two) FROM MyEntity myEntity

to get a list of entity descriptions.

轻许诺言 2024-09-03 12:50:46

如果您不需要的表的列数超过这 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文