当前位置: 首页 > 面试题库 >

使用休眠获取更少的列

宋俊民
2023-03-14
问题内容

我有一个包含11列的表,但是我需要在我的应用程序中仅获得2列,我使用的是spring / hibernate /
DAO组合。现在,我有一个包含所有11个字段的域类,以及一个映射表中所有11列的映射文件。如何使用仅获得其中的2个?


问题答案:

要么:

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

    select f.foo, f.bar from FatEntity f
    
  2. 在SELECT子句中使用构造函数表达式(不需要将指定的类作为实体或映射到数据库)-Pro:类型安全的解决方案-Con:更多类,除非您重用FatEntity作为持有者,否则将有很多字段null

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

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

  1. 使用仅在必填字段上映射到同一表的另一个实体-Pro:这是您可以修改和更新的真实实体-Con:更多类。
    from LightEntity
    

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

  • #2中的所有者可以是映射到另一个表的实体。

  • 如果#2返回实体,则它们处于新状态(这可能是一个问题,也可能不是)。


 类似资料:
  • 问题内容: 我有一个相当复杂的数据库结构,正在尝试进行审核。目前,我正在运行Envers,并且它审核对每个对象所做的更改。这真的很好! 我现在想在用户界面上显示一些审核信息。对象/表变得非常复杂,因此我正在寻找一种方法来查看审核中哪些字段已更改。当前存储每个带有修订ID的对象的快照。我可以查看每个对象的修订版本,然后手动查询以查看发生了什么更改,但是我想知道是否有一种方法可以存储哪些字段已更改。这

  • 问题内容: 我有几个SQL查询,我只是想在数据库上触发。我在整个应用程序中都使用hibernate方式,因此我更喜欢使用hibernate方式来调用此sql查询。 在下面的示例中,我想获取count +名称,但是当我使用createSQLQuery()时无法弄清楚如何获取该信息。 我已经看到了一些解决方法,人们只需 要从结果中 得出一个“ count( )”,但是在这种情况下,我使用count(

  • 问题内容: 我想使用Hibernate的 Criteria API ,选择表中具有给定列最大值的记录。 我试图用投影,创造一个别名为,然后使用它,但它不断告诉我“ 无效号码 ”。 用Hibernate做到这一点的正确方法是什么? 问题答案: 您可以使用来表示子查询,如下所示: 参考文献 Hibernate Core参考指南 15.8。分离的查询和子查询

  • 问题内容: 我有一个Spring和Hibernate3在生产中运行良好的应用程序。以下是Spring的applicationContext.xml中会话工厂的配置 生产正常。 现在,对于另一个项目,我们正在迁移到Hibernate4。我们使用org.springframework.orm.hibernate4。*包中的Hibernate 4的SessionFactory,TransacionMan

  • 问题内容: 我正在寻找展示如何将MongoDB与Hibernate集成的资源(最好是在Spring内),以便我可以在RDBMS和NoSql替代品之间进行切换:有人有这样做的经验吗? 问题答案: 您不能轻易做到这一点。Hibernate的重点是将Java对象映射到关系数据库。尽管Hibernate提取了许多细节,但您仍然需要了解关系数据库如何与诸如外键和主键之类的东西一起工作,以及运行查询对性能的影

  • 问题内容: 我正在尝试运行一个更新查询,它将在sql中看起来像这样: 我正在尝试使用 Criteria 这样重新创建查询: 这行不通,因为满足该条件的行很多,我的独特结果是我猜这里的问题。如何将其转换为符合条件的所有行的更新。我不想使用HQL查询,而是使用Criteria来执行。 问题答案: 始终建议执行批量操作非常接近数据库,除非需要,否则我们不需要在会话中保留更新的对象,因此,在执行批量操作时