Hibernate保存重复

时间:2013-06-24 20:14:25

标签: java hibernate

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

@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
 }

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

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:0)

据我所知,Country表就像字典一样,在大多数情况下,每次保存实体时都不应该保存它。为什么需要通过级联保存?

如果您真的需要更新Country,为什么在保存User实例之前不会这样做?

使用CascadeType.ALL并不是很好,因为删除Country时会丢失User