在没有“mappedBy”的情况下区分JPA关系的拥有和反面

时间:2012-01-08 22:13:34

标签: java hibernate jpa orm

我遇到了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)支持?

2 个答案:

答案 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。