休眠注释删除未在 shema 导出中交出



我对休眠 4.3.5 注释有问题。我有一个项目,我使用注释和休眠 shema 导出来生成我的数据库。所有 JPA 注释都运行良好,数据库生成良好。当我想添加一个休眠注释时,问题就来了:onDelete。Shema 导出忽略了此注释,我找不到使其工作的方法。我搜索了很多,发现了一些类似的主题,但没有一个能解决我的问题。

@Entity
@Table (name="comment")
public class Comment{
    ...
    @ManyToOne (fetch = FetchType.LAZY)
    @OnDelete (action=OnDeleteAction.CASCADE)
    @JoinColumn(name="from_user_id_comment")
    User fromUser;
    ...
}

我的关系是双向的。(我在类用户中有一个评论列表(。

为创建表"注释"生成的SQL脚本如下:

Hibernate: 
    create table comment (
        ...
        from_user_id_comment integer,
        ...
        primary key (id_comment)
    )

Hibernate: 
    alter table comment 
        add constraint FK_7m60iklffdi8xx9m6tw8ci4w7 
        foreign key (from_user_id_comment) 
        references user (id_user)

我使用 maven 来处理我的依赖项。

我希望休眠做的是生成带有约束的"ON DELETE CASCADE",因此级联由数据库处理。

有人可以帮我吗?

谢谢

帕特

POM.xml依赖

<dependencies>
    <dependency>
        <groupId>org.postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <version>9.2-1003-jdbc4</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.25</version>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>4.3.5.Final</version>
    </dependency>
    <dependency>
        <groupId>javax.mail</groupId>
        <artifactId>mail</artifactId>
        <version>1.4.7</version>
    </dependency>
    <dependency>
        <groupId>org.apache.directory.studio</groupId>
        <artifactId>org.apache.commons.lang</artifactId>
        <version>2.6</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-c3p0</artifactId>
        <version>4.3.5.Final</version>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.14.8</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

我终于设法让它工作了。

休眠的MySQLdialect(以及MySQL5Dialect(不会将@OnDelete注释转换为"ON DELETE CASCADE"语句。我不知道为什么。

我的数据库是带有InnoDB引擎的MySQL5数据库。
我发现我可以使用MySQL5InnoDBDialect,它有效!

我所做的唯一更改是在我的休眠.cfg.xml文件中,在以下行:

<property name="dialect">
    org.hibernate.dialect.MySQL5InnoDBDialect
</property>

现在,架构导出为我的@OnDelete(action=OnDeleteAction.CASCADE(注释生成ON DELETE CASCADE 语句

Hibernate: 
    alter table comment 
        add constraint FK_7m60iklffdi8xx9m6tw8ci4w7 
        foreign key (from_user_id_comment) 
        references user (id_user)
        on delete cascade

有关Hibernate支持的其他方言,请参阅此页面 https://docs.jboss.org/hibernate/core/3.5/javadoc/org/hibernate/dialect/package-summary.html:

最新更新