【发布时间】:2012-01-08 22:13:34
【问题描述】:
我在使用 JPA/Hibernate 以及 @OneToMany 与 @OrderColumn 的映射时遇到问题。而且我发现这可能是missing distinction between the "owning" and the "inverse" side的关系问题。
但是Hibernate does not support the following combination
@OneToMany(mappedBy="...")
@OrderColumn(...)
我如何告诉 JPA/Hibernate 拥有方是哪一方?
我试过了
@OneToMany
@OrderColumn(...)
@JoinTable(name="...")
但它没有帮助。
好像是Hibernate bug(试过Hibernate 3.6.1和3.6.9)。 EclipseLink 等其他 JPA 提供程序是否支持 mappedBy 和 @OrderColumn 的组合?
【问题讨论】:
-
我已经把这个问题联系起来了。我的问题不是重复,而是补充。
-
JPA 中的 "mappedBy" 是为了使关系成为双向的。省略它意味着它是单向的,因此“拥有”是不言而喻的。
-
@deamon JPA 规范要求“mappedBy”将关系标记为双向。事实。什么“有效”或以其他方式(在 Hibernate 中)是一个不同的问题。 OrderColumn 是将 List 作为“索引”而不是使用某些“order by”子句,即一个单独的概念。 DataNucleus JPA 当然允许双向索引列表
-
您尝试了哪个版本的 Hibernate?似乎他们最初错误地解释了规范,但后来承认了他们的错误。这是很久以前的事了,所以你会认为它现在已经实现了。 @DataNucleus 你知道这是否被 TCK 覆盖吗?
-
@Mike 抱歉,我不知道它是否在 JPA2 TCK 中; TCK 当然是秘密的,尽管满足了他们的所有要求和管理,Oracle 还是阻止了 DataNucleus 项目的访问。我们只能希望他们通过 JPA2.1 改进这一点,并提供一个开源 TCK,以便每个人都可以检查合规性,然后人们就可以更好地决定为他们的项目使用什么