我有两个共享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:
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
注释来查找要加入的列。我看到我可以指定一个连接类型,但是我没有看到指定实际列的方法。
答案 0 :(得分:1)
我原本希望联接使用
@JoinColumn
注释来查找要加入的列。我看到我可以指定一个连接类型,但是我没有看到指定实际列的方法。
加入是使用JoinColumn
注释,因为它正在加入d1_.UUID
。但是,由于您未指定referencedColumnName
元素,因此假定外键引用引用表(this_.SOMETHING_ID
)的主键,因此获得的结果。
换句话说,试试这个:
@OneToMany
@JoinColumn(name="uuid", referencedColumnName="uuid")
private List<Detail> details = new LinkedList<Detail>();
我不确定这个好处,但让我们说这是另一个故事。