我是Spring Data的新手,我想知道在保存父对象时如何更新子对象。
POJO的:
@Entity
@Table(name = "A")
public final class A {
@Id
@Column(name = "A_ID")
private Long id;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "B_ID")
private B b;
}
@Entity
@Table(name = "B")
public final class B {
@Id
@Column(name = "B_ID")
private Long id;
@Column(name = "B_NAME")
private String bName;
}
存储库:
public interface ARepository extends JpaRepository<A, Long> {
}
单元测试:
@Test
public void testSaveA() {
B b = new B();
b.setId(1L);
b.setName("b");
A a = new A();
a.setB(b);
//If b already exists in database then ConstraintViolationException
ARepository.save(b);
}
所以这里的问题是它试图插入b
而不是更新它。
是否可以使用级联来更新它?
答案 0 :(得分:0)
首先,您必须使用@Transactional
来保留任何附加对象。然后你必须获取孩子,如果它存在,则将现有孩子分配给A
,否则创建一个新孩子。
@Transactional()
public void update() {
B b = ARepository.find(1L);
if (b == null) b = new B();
//update etc
}