我的数据库中的两个表之间存在多对一关系用户表&国家表。模型类是:
@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对象时,即使该数据库中已存在该国家/地区,它也会保存新的国家/地区记录。我该如何解决这个问题?
答案 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
。