我对休眠 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: