我遇到了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)。 mappedBy
和@OrderColumn
的组合是否由另一个JPA提供程序(如EclipseLink)支持?
答案 0 :(得分:2)
根据问题的变化,DataNucleus JPA支持这样的组合,按http://www.datanucleus.org/products/accessplatform_3_0/jpa/orm/one_to_many_list.html#join_bi 只需用@OrderColumn
替换该示例中的@OrderId答案 1 :(得分:0)
最后,我找到了将position
放入应该订购对象的类(Task
)的解决方法。
@Entity
public class TaskList extends GenericModel {
@OneToMany(mappedBy="taskList", cascade=CascadeType.ALL, orphanRemoval=true)
@OrderBy("position")
public List<Task> tasks = new ArrayList<>();
public void addTask(int position, task) {
task.taskList = this;
tasks.add(position, task);
updatePositions();
}
private void updatePositions() {
int position = 0;
for(Whish whish : whishes)
whish.setPosition(position++);
}
}
也许其他JPA提供商在这种情况下做得更好,但我现在必须坚持使用Hibernate。