Hibernate Criteria加入问题

时间:2010-11-03 01:46:40

标签: java hibernate join criteria

我有两个共享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注释来查找要加入的列。我看到我可以指定一个连接类型,但是我没有看到指定实际列的方法。

1 个答案:

答案 0 :(得分:1)

  

我原本希望联接使用@JoinColumn注释来查找要加入的列。我看到我可以指定一个连接类型,但是我没有看到指定实际列的方法。

加入使用JoinColumn注释,因为它正在加入d1_.UUID。但是,由于您未指定referencedColumnName元素,因此假定外键引用引用表(this_.SOMETHING_ID)的主键,因此获得的结果。

换句话说,试试这个:

@OneToMany
@JoinColumn(name="uuid", referencedColumnName="uuid")
private List<Detail> details = new LinkedList<Detail>(); 

我不确定这个好处,但让我们说这是另一个故事。