我有两个类共享一个 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
注释来找到要连接的列。我看到我可以指定联接类型,但我没有看到指定实际列的方法。
最佳答案
I would have expected the join to use the
@JoinColumn
annotation to find the column to join on. I see that I can specify a join type, but I don't see a way to specify the actual column.
连接正在使用JoinColumn
注释,因为它是在d1_.UUID
上连接的。但是,因为您没有指定 referencedColumnName
元素,外键被假定为引用引用表的主键 (this_.SOMETHING_ID
),因此获得结果。
换句话说,试试这个:
@OneToMany
@JoinColumn(name="uuid", referencedColumnName="uuid")
private List<Detail> details = new LinkedList<Detail>();
我不确定我是否理解其中的好处,但让我们假设这是另一个故事。
关于java - Hibernate Criteria Join问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4083611/