Hibernate 内部联接完整实体类字段的休眠条件
我的实体模型类是Hibernate 内部联接完整实体类字段的休眠条件,hibernate,criteria-api,Hibernate,Criteria Api,我的实体模型类是 ------- A ----------- private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; @Column(name = "NameA") private String nameA; public B getBid() { r
------- A -----------
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(name = "NameA")
private String nameA;
public B getBid() {
return b;
}
public void setBid(B bid) {
this.b = bid;
}
public String getNameA() {
return nameA;
}
public void setNameA(String nameA) {
this.nameA = nameA;
}
@JoinColumn(name = "BID", referencedColumnName = "ID")
@ManyToOne(fetch= FetchType.LAZY)
private B b;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
--------------------------------------------
------------------ B -----------------------
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(name = "NameB")
private String nameB;
public String getNameB() {
return nameB;
}
public void setNameB(String nameB) {
this.nameB = nameB;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
及
我想
进行此查询session.createQuery(“从a中选择a.b”).list()代码>
使用Criteria API???因为您没有反向关系,而且Criteria不允许选择根实体以外的其他实体,所以您必须使用子查询,但它很难看:
DetachedCriteria subquery = DetachedCriteria.forClass(A.class, "a");
subquery.createAlias("a.b", "b2");
subquery.setProjection(Projections.property("b2.id"));
Criteria c = session.createCriteria(B.class, "b1");
c.add(Subqueries.propertyIn("b1.id", subquery));
如果你有从B到A的一对一的反向关系,你就必须这样做
Criteria c = session.createCriteria(B.class, "b1");
c.createAlias("b1.as", "a");
顺便说一句,这些非动态构造的查询使用HQL比使用CriteriaAPI更好地表达。如果您真正的查询是您要求的查询,只需使用HQL即可:它更具可读性和功能更强大。您的示例和建议很好,但没有其他方法可以做到这一点?例如b.*或b.nameB类的特殊字段,在我的示例模型类之上的类没有映射注释我不确定是否理解。我给出了HQL查询的翻译:“从a中选择a.b”。此查询返回至少一个A实例引用的所有B实例。这是您想要的吗?如果没有,你想要什么?我只想做这个投影。属性或投影列表不想使用DetachedCriteria或子查询你告诉我你想怎么做,但不是你想做什么。请求应该返回什么?我不知道怎么做,但是在hibernate中有一种方法。B类的所有字段(表B中的列),该B类是具有多个One的类中的实例?