【问题标题】:Why does the @Many side in a @OneToMany relationship require a reference to the @One side?为什么@OneToMany 关系中的@Many 端需要引用@One 端?
【发布时间】:2018-01-21 15:48:25
【问题描述】:

我刚刚花了两个小时拔头发,想知道为什么 @OneToMany 关系中的 @Many 端总是包含所有者的空 id 值。 我有两个休眠实体,用户和购买。一个用户可以进行多次购买,一次购买只能属于一个用户。以下是我的代码的sn-p

//关于实体用户

@OneToMany(mappedBy = "user", cascade = CascadeType.ALL)
private Set<Purchase> purchases = new HashSet<Purchase>();

//关于实体购买

@ManyToOne(fetch = FetchType.EAGER)
private User user;

现在,当我将新的购买添加到用户的“购买”集时,我意识到用户的 ID 不会自动链接到相应的购买。我必须在这里手动调用 setUser(User user) 方法:

//在User类中

    Purchase purchase = new Purchase();
    purchase.setUser(this);
    purchases.add(purchase);

为什么需要第二行?

【问题讨论】:

  • 因为Many方是关联的拥有方,也就是Hibernate认为知道关联是否存在的关联方。
  • 自从使用 JPA 之类的东西已经有一段时间了,但我很确定这在理论上可以像你解释的那样工作......如果我没记错的话,这应该是解决你问题的行(转到链接,因为这个问题不是那么容易解释)@JoinColumn(name="CUST_ID",referencedColumnName="CUST_ID")javaworld.com/article/2077819/java-se/…

标签: java spring hibernate


【解决方案1】:

您将需要一个单独的函数将用户链接到程序的其他部分。我不知道程序是由什么组成的,但请确保你有一个 getter 函数。

【讨论】:

    【解决方案2】:

    您必须提交您的事务,以便 Hibernate 可以自动为您填写 user 字段。否则,Hibernate 无法知道您的实体何时准备好提交到数据库。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-04
      相关资源
      最近更新 更多