我在使用@ManyToOne进行级联重播方面存在很大问题。我有两个类:User(来自“one”方)和Adress(来自“many”方),我的问题是:
- 当删除与User关联的Adress实体时(当然用户有很多关联的Adress),不仅会从数据库中删除一个Adress记录,而且他的所有者= User ass。更多 - 与此用户相关的所有地址也将被删除:(
- 所以,这不是我的预期,任何人都可以告诉我,我该怎么办?
用户类
public class User implements Serializable{
@Column(name="id")
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Integer getId() {
return id;
}
private Set<Adress> adresses;
@OneToMany(mappedBy = "user", cascade=CascadeType.ALL)
public Set<Adress> getAdresses() {
return adresses;
}
...
}
单元类
@Entity
@Table(name="unit")
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name="unit_type", discriminatorType = DiscriminatorType.STRING)
public class Unit implements Serializable {
private Integer id;
@Id
@Column(name="id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Integer getId() {
return id;
}
}
地址类
@DiscriminatorValue("adr")
public class Adress extends Unit implements Serializable {
private User user;
@ManyToOne
@JoinColumn(name="adress_id")
public User getUser(){
return user;
}
...
}
AdressDaoImpl类的一部分:
public void delete(Adress adress) {
Adress mergedWithContextAdress = entityManager.merge(adress);
entityManager.remove(mergedWithContextAdress);
logger.info("Adress removed.");
}
AdressDaoTest课程的部分:
Adress adress = adressDao.findById(1);
adressDao.delete(adress);
答案 0 :(得分:0)
尝试这样做
Adress adress = adressDao.findById(1);
adress.setUser(null); //Set null reference before remove
adressDao.delete(adress);
只是评论它应该是地址而不是地址XD。