java - Hibernate Criteria Join问题

标签 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 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/

相关文章:

java - JPA 唯一重命名唯一索引

java - 我是否在组合键中正确定义了多对一?

MySQL - 非常复杂的随机行

mysql - 挂起mysql查询

java - ClassNotFoundException : com. mysql.jdbc.Driver 但它位于类路径中

java - 如何在 JSF 2.0 中获取选项卡式 Pane 组件 (Sun Mojarra)

hibernate - Scala 中的 JPA/Hibernate 元素集合

java - Mongo 客户端 {Mongo-Java-driver} 创建挂起持续时间。没有抛出异常

java - 尝试构建一个简单的 Observer-Observable

mysql - 向 MySQL 表查询添加列