sha*_*dab 3 java hibernate jpa spring-boot
我有 2 个对象和地址。人是父母,地址是孩子。
我的存储库正在扩展 JPARepository。
personRepository.save(person);
插入工作正常。但是当我通过更新两个表中的状态(例如:Active)并使用personRepository.save(person);我的外键引用(person_fk)来更新人员对象时,它被设置为空。
我的父类:
@Entity
@DynamicUpdate
@Table(name = "person")
public class Person {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="person_pk", nullable=false)
private Long personPK;
@OneToMany(fetch = FetchType.EAGER, mappedBy = "person",cascade = CascadeType.PERSIST)
private Set<Address> addresses = new HashSet<>();
...
}
Run Code Online (Sandbox Code Playgroud)
还有我的孩子班:
@Entity
@DynamicUpdate
@Table(name = "address")
public class Address {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "address_pk")
private Long addressPK;
@ManyToOne
@JoinColumn(name = "person_fk", referencedColumnName = "person_pk", nullable=false)
private Address address;
...
}
Run Code Online (Sandbox Code Playgroud)
从我的服务层,我正在使用以下方法更新它:
personRepostiry.save(person);
任何帮助我在这里做错了什么?
首先改变:
@ManyToOne
@JoinColumn(name = "person_fk", referencedColumnName = "person_pk", nullable=false)
private Address address;
Run Code Online (Sandbox Code Playgroud)
到:
@ManyToOne(targetEntity = Person.class)
@JoinColumn(name = "person_fk", referencedColumnName = "person_pk", nullable = false)
private Person person;
Run Code Online (Sandbox Code Playgroud)
然后改变:
@OneToMany(fetch = FetchType.EAGER, mappedBy = "person",cascade = CascadeType.PERSIST)
private Set<Address> addresses = new HashSet<>();
Run Code Online (Sandbox Code Playgroud)
到:
@OneToMany(fetch = FetchType.EAGER, mappedBy = "person", cascade = {CascadeType.PERSIST, CascadeType.MERGE})
private Set<Address> addresses = new HashSet<>();
Run Code Online (Sandbox Code Playgroud)
并将其添加到您的 Person 类中:
public void addAddress(Address address) {
address.setPerson(this);
addresses.add(address);
}
Run Code Online (Sandbox Code Playgroud)
然后使用:
person.addAddress(address);
persist(person)
Run Code Online (Sandbox Code Playgroud)
或者
merge(person);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10711 次 |
| 最近记录: |