当我需要部分更新 BD 中的数据时,我遇到了这个问题。
我所拥有的: 我有三个链接的实体:
个人资料-- (1-m) -->人-- (1-1) -->地址
其中 Person -> Address 是惰性关系。它是通过 optional=false 选项实现的(允许休眠使用代理)。
什么问题:
我需要以这种方式更新配置文件,我不需要提取与此配置文件链接的所有地址。
当我更新个人资料时(不工作):
profile.setPersons(persons);
session.saveOrUpdate(profile);
throws : org.springframework.dao.DataIntegrityViolationException: not null 属性引用 null 或瞬态值
发生这种情况是因为 Person->Address 关系具有 optional=false 选项
我需要去做:
//for each person
Address address = requestAddressFromDB();
person.setAddress(address);
persons.add(person)
//and only then
profile.setPersons(persons);
session.saveOrUpdate(profile);
profile.setPerson(person)
但我不想每次更新个人资料名称时都提取所有地址。
问题是什么:
如何避免强制 Person->(not null)Address 约束来保存我的个人资料而不提取所有地址?
补充:
@Entity
public class Person{
@Id
@SequenceGenerator(name = "person_sequence", sequenceName = "sq_person")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "person_sequence")
@Column(name = "id")
private long personID;
@OneToOne(mappedBy="person", cascade=CascadeType.ALL, optional = false, fetch = FetchType.LAZY)
private Address address;
//.. getters, setters
}
@Entity
public class Address {
@Id
@Column(name="id", unique=true, nullable=false)
@GeneratedValue(generator="gen")
@GenericGenerator(name="gen", strategy="foreign", parameters=@Parameter(name="property", value="person"))
private long personID;
@PrimaryKeyJoinColumn
@OneToOne
private FileInfo person;
}