为什么jpa2 / eclipselink在删除级联SQL时没有生成?

时间:2010-09-15 00:24:04

标签: java orm jpa eclipselink jpa-2.0

@Entity 公共类MUser实现Serializable,MemoEntity {

private static final long serialVersionUID = 1L;
@Id
private String email;

@OneToMany(cascade=CascadeType.ALL, orphanRemoval=true)
private Set<Meaning> mengs = new HashSet<Meaning>();

这不应该意味着我通过“删除级联”获得约束吗?

这是生成的内容:

  CREATE TABLE MUSER_MEANING (MUser_EMAIL VARCHAR(255) NOT NULL, mengs_OBJID INTEGER NOT NULL, PRIMARY KEY (MUser_EMAIL, mengs_OBJID))
CREATE TABLE MUSER_MEANING (MUser_EMAIL VARCHAR(255) NOT NULL, mengs_OBJID INTEGER NOT NULL, PRIMARY KEY (MUser_EMAIL, mengs_OBJID))
ALTER TABLE MEANING ADD CONSTRAINT MEANING_USR_EMAIL FOREIGN KEY (USR_EMAIL) REFERENCES MUSER (EMAIL)
ALTER TABLE MUSER_MEANING ADD CONSTRAINT MSRMEANINGMsrEMAIL FOREIGN KEY (MUser_EMAIL) REFERENCES MUSER (EMAIL)

我试图这样做,删除MUser会删除与之关联的所有含义。

1 个答案:

答案 0 :(得分:2)

  

为什么在删除级联SQL时没有生成jpa2 / eclipselink?

因为事情并非如此。指定cascade=REMOVE意味着remove操作将由JPA提供程序级联到实体,而不是使用约束在数据库级别。

某些提供程序确实具有在数据库级别使用级联删除约束而不是常规机制的扩展。例如,使用Hibernate,您可以指定:

  加入的子类上的

@OnDelete(action=OnDeleteAction.CASCADE):在删除时使用SQL级联删除而不是常规的Hibernate机制。

但我不知道EclipseLink是否有相同的东西。

参考