休眠条件连接问题

问题描述:

我有一个共享一个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>(); 

我不知道理解的利益,而是让我们说这是另一回事。