【问题标题】:Why does not jpa2/eclipselink generate on delete cascade SQL?为什么 jpa2/eclipselink 在删除级联 SQL 时不生成?
【发布时间】:2010-09-15 00:24:03
【问题描述】:

@实体 公共类 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>();

这不应该意味着我得到了“on delete cascade”的约束吗?

这是生成的:

  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 删除与其关联的所有含义。

【问题讨论】:

    标签: java orm jpa eclipselink jpa-2.0


    【解决方案1】:

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

    因为事情不是这样运作的。指定cascade=REMOVE 意味着remove 操作将由JPA 提供者 级联到实体,而不是在数据库级别使用约束。

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

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

    但我不知道 EclipseLink 是否有类似的东西。

    参考文献

    【讨论】:

      猜你喜欢
      • 2011-07-21
      • 2011-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-28
      • 2012-11-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多