我遇到了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>
答案 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