Eclipelink @ElementCollection 删除所有合并
Eclipelink @ElementCollection remove all on merge
我有这个映射:
@Entity
@Table(name="CUSTOMER")
class Customer {
@Id
@Column(name="CUSTOMER_ID")
Long id;
...
@ElementCollection
@CollectionTable(name="CUSTOMER_ADDRESS", joinColumns=@JoinColumn(name="CUSTOMER_ID"))
List<CustomerAddress> addresses;
}
@Embeddable
class CustomerAddress {
String street;
String zip;
String ...
String ...
...
}
我为客户 ID 保存了两个地址:1. 如果我更新此客户,只有一个地址,Eclipselink 会尝试使用 DELETE where 语句中的所有 CustomerAddress 字段删除丢失的地址行:
DELETE FROM CUSTOMER_ADDRESS WHERE STREET = ?, ..., ZIP = ?, ..., CUSTOMER_ID = ?
问题是我可能有重音符号和其他数据阻止 WHERE 语句匹配使用所有字段的行。有没有办法强制Eclipselink删除所有用户地址重新插入?
DELETE FROM CUSTOMER_ADDRES WHERE CUSTOMER_ID = ?
INSERT ALL FROM COLLECTION
我找不到实现我想要的方法。似乎 Hibernate 具有我期望的行为。
将 ElementCollection 更改为 OneToMany 并将模型更改为在 CustomerAddress 下有一个 ID。
我有这个映射:
@Entity
@Table(name="CUSTOMER")
class Customer {
@Id
@Column(name="CUSTOMER_ID")
Long id;
...
@ElementCollection
@CollectionTable(name="CUSTOMER_ADDRESS", joinColumns=@JoinColumn(name="CUSTOMER_ID"))
List<CustomerAddress> addresses;
}
@Embeddable
class CustomerAddress {
String street;
String zip;
String ...
String ...
...
}
我为客户 ID 保存了两个地址:1. 如果我更新此客户,只有一个地址,Eclipselink 会尝试使用 DELETE where 语句中的所有 CustomerAddress 字段删除丢失的地址行:
DELETE FROM CUSTOMER_ADDRESS WHERE STREET = ?, ..., ZIP = ?, ..., CUSTOMER_ID = ?
问题是我可能有重音符号和其他数据阻止 WHERE 语句匹配使用所有字段的行。有没有办法强制Eclipselink删除所有用户地址重新插入?
DELETE FROM CUSTOMER_ADDRES WHERE CUSTOMER_ID = ?
INSERT ALL FROM COLLECTION
我找不到实现我想要的方法。似乎 Hibernate 具有我期望的行为。
将 ElementCollection 更改为 OneToMany 并将模型更改为在 CustomerAddress 下有一个 ID。