【发布时间】:2018-07-20 00:23:20
【问题描述】:
我在 Java 项目中使用 Hibernate 来连接数据库。我有以下课程:
@Entity
@Table(name = "a")
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class A {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", nullable = false)
private Long id;
}
@Entity
@Table(name = "b")
public class B extends A {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "c_id", nullable = false)
private C c;
}
@Entity
@Table(name = "c")
public class C {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", nullable = false)
private Long id;
}
我正在尝试对 A 编写一个查询,该查询将急切地在 B 中获取 C。我尝试这样做:
CriteriaBuilder builder = session.getCriteriaBuilder();
CriteriaQuery<A> criteria = builder.createQuery(A.class);
Root<Pin> root = criteria.from(A.class);
criteria.select(root);
builder.treat(root, B.class).fetch("c", JoinType.LEFT);
但它不会执行提取。奇怪的是,我能够成功地执行以下操作来进行左连接:
Join c = builder.treat(root, B.class).join("c", JoinType.LEFT);
任何想法我做错了什么?
【问题讨论】:
-
如果我明白,你有一个字段设置为
lazy并且你希望它在一个特定的查询中被急切地获取......最简单的方法是正常查询并迭代结果强制休眠获取嵌套字段。