@Entity
public class Employee {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;
private String name;
private long salary;
@OneToOne(cascade = {CascadeType.PERSIST})
@JoinColumn(name="DEPT_ID")
private Dept dept;
...
}
@Entity
public class Dept {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;
private String name;
...
**other huge collections with eager fetch ***
}
最好的选择是使集合惰性加载,然后将需要集合的查询更改为急切加载(使用join fetch)。如果您有一个非常好的理由不这样做,那么您可以尝试以下变通方法。
可以使用投影查询。这将为每个结果生成一个[employee,name]数组。
select employee, employee.dept.name from Employee employee
可以使用@formula将Employee表中的属性映射到Department表中的列(注意,此解决方案是特定于Hibernate的)
class Employee {
@Formula("(select deptName from Department where Department.id = DEPT_ID)"
String deptName;
}
@Entity
public class Employee {
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;
private String name;
private long salary;
@OneToOne(cascade = {CascadeType.PERSIST})
@JoinColumn(name="DEPT_ID")
private Dept dept;
@OneToOne(updatable=false,insertable=false)
@JoinColumn(name="DEPT_ID")
private DeptLite deptLite;
...
}
@Entity
@org.hibernate.annotations.Entity(mutable=false)
class DeptLite {
}
我的本机查询将类似于:“select*from a inner join b inner join c on a.ida=b.idb and b.lastname=c.lastname and a.name=c.name” 在hibernate中,如果要连接两个表,可以使用@joincolum,如果要通过表B连接表A和表C,可以使用@joincable。 因此在HQL中查询将看起来像:“from
这是我的命名查询: @NamedQuery(name=“User.findOneWithLists”,query=“从用户u中选择u”“左连接获取u.aTemplates”“左连接获取u.bTemplates”“左连接获取u.bp”“左连接获取u.aCredentials”“左连接获取u.st WHERE(st.deleted=false)”“左连接获取u.bCredentials”“左连接获取u
问题内容: JPA /hibernate查询中允许的联接数是否有限制? 由于Hibernate 不会自动加入,因此我必须在JPA / Hibernate查询中明确指定加入。例如,一个人有一个地址,一个地址有一个状态。以下查询检索地址和状态已满的人员: 随着我不断添加联接,最终(在左联接12-13之后)达到了Hibernate生成无效SQL的限制: 我确实将Hibernate的方言设置为数据库实现M
我在使用LEFT JOIN FETCH时遇到了一个问题。请参考我下面的实体和存储库。 考虑一个场景,可选的课程不会在任何时间点从表中删除。但是学生信息可以被删除。数据库中的两个表之间没有主键和外键关系。只是我们有一个共同的栏目“学生ID”。 不带事务的服务方法: 具有事务性的服务方法: 尽管我使用了LEFT JOIN FETCH,但当我调用依赖实体(即oc)时,为什么在学生记录不存在的情况下(即学
我需要从Rest控件获取一个实体及其集合,但我对spring data JPA有一个非常奇怪的行为。 我对带有懒惰加载的实体有一种莫名其妙的关系。
我将hibernate-orm与spring-data-jpa一起使用。我有三个实体、、声明如下: 我的目标是获得A和获取b的列表,在实体C上有一些条件,而不获取它。以下JPQL工作正常。 当我尝试使用JPA规范时,我的规范如下所示: 我正在重用由fetch操作完成的隐式连接。此连接不符合规范。它输出以下JPQL。 也就是说,没有别名。 我研究了Hibernate GitHub的源代码。我发现,有