【问题标题】:Hibernate Criteria Join problemHibernate Criteria Join问题
【发布时间】:2010-11-03 01:46:40
【问题描述】:

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

【问题讨论】:

    标签: java hibernate join criteria


    【解决方案1】:

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

    连接使用JoinColumn 注释,因为它是在d1_.UUID 上连接的。但是,由于您没有指定referencedColumnName 元素,因此假定外键引用了被引用表的主键(this_.SOMETHING_ID),因此得到的结果。

    换句话说,试试这个:

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

    我不确定它的好处,但假设这是另一个故事。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-21
      • 1970-01-01
      • 1970-01-01
      • 2015-12-12
      • 2012-02-02
      • 2014-01-03
      • 1970-01-01
      • 2013-07-16
      相关资源
      最近更新 更多