我有3个实体,A,B,C。
1,A <----> B
A和B之间的关系为@OneToOne
2,A <----> C
A和B之间的关系为@OneToMany
3,B <-X-> C
B和C之间没有关系
我已经有了像这样的实体代码:
public class A {
@Id
@Column(name = "id")
private Integer id;
@Transient
private String bData;
@OneToOne(mappedBy = "a")
private B b;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "a")
private Collection<C> cs = new LinkedHashSet<>();
}
public class B {
@Id
@Column(name = "id")
private Integer id;
@Column(name = 'data')
private String data;
@OneToOne
@JoinColumn(name= "id", insertable = false, updatable = false)
private A a;
}
public class C{
@EmbeddedId
private EmbdId embdId;
@ManyToOne
@JoinColumn(name = "id")
@MapsId("id")
private A a;
}
public class EmbdId{
@Column(name = "id")
private Integer id;
@Column(name = "another_Id")
private Integer another_Id;
}
我也有这样的实体A的条件和投影:
private Criteria createACriteria() {
return hibernateDaoMap.get(A).createCriteria("a")
.setFetchMode("B", FetchMode.SELECT)
.setFetchMode("C", FetchMode.SELECT)
.createAlias("a.b", "b", JoinType.LEFT_OUTER_JOIN)
.createAlias("a.cs", "cs", JoinType.LEFT_OUTER_JOIN)
//not sure if
.setProjection(projectionList()
.add(property("a.id"), "id")
.add(property("b.data"), "bData")
.add(property("cs"), "cs")
.setResultTransformer(Transformers.aliasToBean(A.class));
}
现在,我已经在A和B之间建立了映射,但是A和C之间没有建立映射。
通过A
查询id
时,我得到了返回的a
的多个实例,但是具有相同的ID。该数字恰好是与c
相匹配的实例id
的数量
我想要的是a
的一个实例,但是A实体中有一组不同的c