我正在尝试在名为Person和Address的两个实体之间建立单向关系,同时保存Person(包含Address的集合)获取org.hibernate.TransientObjectException:object引用未保存的瞬态实例。
当我更改cascadeType = all时,子对象正在传播。但这里的问题是cascadeType =所有Hibernate也试图删除删除所有实体上的子实体。我不希望这种情况发生,因为在ManyToMany关系中某个其他实体可能正在引用实体。理想情况下,cascadeType = persist应该可以完成这项工作,但不幸的是,这会让我提到异常。
有人可以帮我解决如何使用cascadeType = persist保存子对象(地址)。我只是想知道为什么cascadeType = persist不执行持久化任务。
public class Person {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
private String name;
@LazyCollection(LazyCollectionOption.FALSE)
@ManyToMany(cascade={CascadeType.PERSIST,CascadeType.MERGE})
private Collection<Address> address=new HashSet<Address>();
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Collection<Address> getAddress() {
return address;
}
public void setAddress(Collection<Address> address) {
this.address = address;
}
}
@Entity(name="Address")
public class Address {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id")
private Long id;
@Column(name="country")
private String country;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
}
答案 0 :(得分:0)
如果有很多关系,你总是要使用JOIN Table(这是第三个表)。在这种情况下,即使你使用CASCADE,你也不会在删除Owning实体时删除子实体的问题-ALL。
请参阅以下帖子: