Jpa:删除依赖项而不是更新它们
问题描述:
在我的应用程序中,每个客户可以有多个帐户。我有以下数据结构(很多略去了):Jpa:删除依赖项而不是更新它们
@Entity
@Table(name = "CUSTOMER")
public class Customer {
@Id
@Column(length = 36, name = "CUSTOMER_ID", nullable = false, unique = true)
private String id;
@OneToMany
@JoinColumn(name = "OWNER_ID", referencedColumnName = "CUSTOMER_ID")
private List<Account> accounts;
}
@Entity
@Table(name = "ACCOUNT")
public class Account {
@Id
@Column(length = 36, name = "ACCOUNT_ID", nullable = false, unique = true)
private String id;
@Column(name = "OWNER_ID", nullable = false)
private String ownerId;
}
如果我使用JPA删除客户,如
entityManager.remove(customer);
它会尝试更新与相关ACCOUNT.OWNER_ID领域空值。 OWNER_ID不是空的,所以它抛出一个JDBCException并回滚事务。
我需要做的是将相关的ACCOUNT行删除(如果有的话)。我怎样才能做到这一点?
谢谢
更新:我与
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
尝试过,但它不会改变的行为:仍试图用NULL更新。
答
我想你需要使用级联才能删除子元素。试试这个:
@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name = "OWNER_ID", referencedColumnName = "CUSTOMER_ID")
private List<Account> accounts;
您还应该在您的帐户中通过ManyToOne关系引用客户,而不是String ID。我认为这应该可以解决你的问题:
@Column(name = "OWNER_ID", nullable = false)
@ManyToOne
private Customer owner;
+0
我已经试过了,但它没有解决问题:仍然尝试使用null更新ACCOUNT.OWNER_ID字段。 – Androrider
+0
我已更新我的答案@Androrider – Plog
你试过了吗@OneToMany(orphanRemoval =“true”)? –
我已经试过了,但它没有解决问题:仍然尝试使用null更新ACCOUNT.OWNER_ID字段。 – Androrider