Hibernate注释onDelete没有交给shema导出

时间:2014-12-23 15:10:36

标签: java hibernate java-ee persistence

我遇到了hibernate 4.3.5注释的问题。 我有一个项目,我使用注释和hibernate shema导出来生成我的数据库。所有JPA注释都工作正常,数据库生成良好。 当我想添加一个hibernate注释时,问题出现了: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;
    ...
}

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

为创建表“comment”而生成的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来处理我的依赖关系。

我希望hibernate做的是使用约束生成“ON DELETE CASCADE”,因此级联由DB处理。

有人可以帮帮我吗?

谢谢,

专利

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>

1 个答案:

答案 0 :(得分:0)

我终于成功了。

hibernate MySQLdialect(以及MySQL5Dialect)也没有将@OnDelete注释转换为“ON DELETE CASCADE”语句。我不明白为什么。

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

我做的唯一更改是在我的hibernate.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