cor*_*ras 15 java orm hibernate jpa jpa-2.0
当Person对象包含使用@ElementCollection存储的数据时,我无法解决如何使用JPA 批量删除Person对象的问题.关于如何做到这一点的任何想法将非常感激.
@Entity
@Table(name="at_person")
public class Person implements Comparable<Person> {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="id")
private long id = 0;
@Column(name="name", nullable = true, length = 128)
private String name = "";
@ElementCollection
@Column(name = "email")
@CollectionTable(name = "person_email", joinColumns = @JoinColumn(name = "person_id"))
private Set<String> email = new HashSet<String>();
}
Run Code Online (Sandbox Code Playgroud)
我目前正在做的是这个,并且它因外键约束错误而失败:
Query query=em.createQuery("DELETE FROM Person");
Run Code Online (Sandbox Code Playgroud)
引起:java.sql.SQLException:完整性约束违规:外键无动作; FKCEC6E942485388AB表:PERSON_EMAIL
如果它可以是纯粹的JPA注释而不是Hibernate注释,那将是一个奖励!
Pas*_*ent 29
我将让你解释JPA 2.0规范中提到批量删除操作没有级联的部分:
4.10批量更新和删除操作
...
删除操作仅适用于指定类及其子类的实体.它不会级联到相关实体.
事实是,Hibernate也不会将删除级联到集合表中.这已在HHH-5529中报道,建议的方法是:
您还可以(a)自己清理收集表或(b)在架构中使用级联外键.
换句话说,(一)使用本地SQL或(b)使用的级联在数据库级别删除约束-你必须手动添加它,我不认为你可以用@OnDelete与@ElementCollection注释(同样的故事,HHH -4301 IMO).
| 归档时间: |
|
| 查看次数: |
8732 次 |
| 最近记录: |