【问题标题】:Hibernate - How to Object and load foreign key objects in one SQL query?Hibernate - 如何在一个 SQL 查询中对象和加载外键对象?
【发布时间】:2013-12-02 03:57:33
【问题描述】:

我想使用外键对象(关系一对一)从数据库中加载我的对象 我想要实现的是像这样使用我的对象。

parent.getChildrenFk().getName();

我知道我可以通过这两种方式做到这一点

1. Lazy load

...
SQLQuery sqlQuery = session.createSqlQuery("SELECT * FROM parent").addEntity(Parent.class);
List<Parent> list = sqlQuery.list();
for(Parent p : list){
String name = p.getChildFk().getName();
}
return list;
...

此解决方案的缺点是每个孩子的 SQL 查询(我有超过 10000 个父对象)。

2.Second solutions is to get list of Objects[] 
obj[0] is Parent, and obj[1] is Child

SQLQuery sqlQuery = session.createSqlQuery("SELECT * FROM parent INNER JOIN child ch ON parent.child_fk = child.child_id").addEntity(Parent.class).addEntity(Child.class);
return sqlQuery.list();

这个解决方案的缺点是我不能以这种方式访问​​我的对象 parent.getChildrenFk().getName(); 有没有办法在一个查询中加载父对象和子对象像我写的那样访问子obj?

【问题讨论】:

    标签: hibernate


    【解决方案1】:

    查询数据库的最佳方法是使用 HQL。当 HQL 无法满足您的需求时,SQL 可用作备份策略。

    您绝对应该阅读the documentation about HQL,因为您似乎完全忽略了它的存在,而 HQL 是 Hibernate(和 JPA)的关键部分。

    要在单个 HQL 查询中获取父级及其子级,假设它们是父级到子级的关联,并且字段名为 child,您只需要

    select p from Parent p left join fetch p.child
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-19
      • 2018-11-30
      • 1970-01-01
      • 2011-01-22
      • 2012-07-14
      • 1970-01-01
      相关资源
      最近更新 更多