休眠条件连接问题
问题描述:
我有一个共享一个UUID并且被单向映射的两个类。我使用的UUID相关的行,而这一群体共享许多细节(这只是一个例子):休眠条件连接问题
@Entity @Table
class Something {
@Id @Column("something_id")
private Long id;
private String uuid = UUID.randomUUID().toString();
@OneToMany
@JoinColumn("uuid")
private List<Detail> details = new LinkedList<Detail>();
}
@Entity @Table
class Detail {
@Id @Column("detail_id")
private Long id;
private String value;
private String uuid;
}
我试图使用标准:
Criteria c = getSession().createCriteria(Something.class).createAlias("details", "detail").add(Restrictions.eq("detail.value", someValue));
这是所有好花花公子,但我没有收到,因为结果加入:
inner join DETAIL d1_ on this_.SOMETHING_ID=d1_.UUID
是否可以指定:
inner join DETAIL d1 on this_.UUID=d1.UUID
我本来期望该连接使用@JoinColumn
注释来查找要加入的列。我看到我可以指定一个连接类型,但我没有看到指定实际列的方法。
答
我本来期望该连接使用
@JoinColumn
注释来查找要加入的列。我看到我可以指定一个连接类型,但我没有看到指定实际列的方法。
的加入是使用JoinColumn
注解,因为它的加入对d1_.UUID
。但是,因为您没有指定referencedColumnName
元素,所以假定外键引用被引用表(this_.SOMETHING_ID
)的主键,因此获得了结果。
换句话说,试试这个:
@OneToMany
@JoinColumn(name="uuid", referencedColumnName="uuid")
private List<Detail> details = new LinkedList<Detail>();
我不知道理解的利益,而是让我们说这是另一回事。