gpt4 book ai didi

java - Hibernate Criteria Join问题

转载 作者:行者123 更新时间:2023-11-30 11:56:58 25 4
gpt4 key购买 nike

我有两个类共享一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com