0

我的数据库用户表和国家表中的两个表之间存在多对一关系。模型类是:

@Entity (name = "user")
 public class User {

      @Id @GeneratedValue (strategy = GenerationType.IDENTITY)
      private int userId;
      private String username;
      private String password;

      @ManyToOne (cascade = {CascadeType.ALL})
      @JoinColumn (name = "countryId")
      private Country country;

     //Getter & Setter
 }


  @Entity (name = "country")
  public class Country {

      @Id @GeneratedValue(strategy = GenerationType.AUTO)
      private int countryId;
      private String countryName;
      //Getter & Setter
 }

我遇到的问题是,当我保存一个新的用户对象时,它也会保存一个新的国家/地区记录,即使该国家/地区已经存在于数据库中。我怎么解决这个问题?

4

2 回答 2

3

您可以尝试更改关系中的级联类型@ManyToOne

@ManyToOne (cascade = CascadeType.MERGE)
@JoinColumn (name = "countryId")
private Country country;

使用CascadeType.ALL时,还包括,,在这种情况下,只要您的持久用户CascadeType.PERSIST,持久操作就会级联到国家

于 2013-06-24T20:17:18.167 回答
0

据我了解,Country表格就像字典,在大多数情况下,您不应该在每次保存实体时都保存它。为什么需要级联保存?

如果您真的必须更新Country,为什么不在保存User实例之前完成?

使用CascadeType.ALL不是很好,因为Country删除时会松动User

于 2013-10-31T21:58:58.077 回答