【问题标题】:MySQL/JPA : How create a correclty relation and cascade?MySQL/JPA:如何创建正确的关系和级联?
【发布时间】:2013-04-06 16:10:21
【问题描述】:

我对我的项目印象深刻,但突然间我注意到我做错了什么,因为每次创建、合并、删除我都是手动执行的,但我应该让 JPA 为我处理这些对吧?

我所做的是创建数据库,然后从中创建实体。所以here is my database所以你们可以理解我的概念问题。

简单来说: 一个user 有一个address,只有一个地址。这个addresscitystatecountry组成。我希望能够通过级联创建、更新user address

我认为我的由 JPA 生成的映射是错误的(或者我的理解是错误的),让我展示一下:

public class User {
  ..
  //bi-directional many-to-one association to UserAddress
  @ManyToOne(cascade = CascadeType.ALL) // should be one to one ?
  @JoinColumn(name="id_user_address")
  private UserAddress userAddress;
  ..
}

public class UserAddress {
  ..

  //bi-directional many-to-one association to User
  @OneToMany(mappedBy="userAddress", fetch=FetchType.EAGER)
  private List<User> users;

  //bi-directional many-to-one association to AddressCity
  @ManyToOne
  @JoinColumn(name="id_city")
  private AddressCity addressCity;

  //bi-directional many-to-one association to AddressState
  @ManyToOne
  @JoinColumn(name="id_state")
  private AddressState addressState;

  //bi-directional many-to-one association to AddressCountry
  @ManyToOne
  @JoinColumn(name="id_country")
  private AddressCountry addressCountry;
  ..
}

我认为userone adress only,所以应该是OneToOne 映射? UserAdress countrystatecity 也是如此。

【问题讨论】:

    标签: mysql sql database-design jpa jpa-2.0


    【解决方案1】:

    如果您想允许多个用户使用同一地址,@ManyToOne 就是您想要的。如果您使用@O​​neToOne,则每个地址只能有一个用户。

    【讨论】:

    • @Elke,这就是我想要的,一个用户只有一个地址,但我不知道该怎么做..
    • 你所拥有的都是正确的,并且做你想做的。 ManyToOne 和 OneToOne 都为每个用户提供一个地址。不同之处在于每个地址的用户数量。由于您在 UserAddress 实体中有一个用户列表,因此您希望在您的 User 实体中进行多对一映射。
    • 现在我明白了。谢谢老兄!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-16
    • 2015-07-22
    • 2020-03-19
    • 2019-07-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多