【发布时间】:2014-12-23 15:10:35
【问题描述】:
我在使用 hibernate 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;
...
}
我的关系是双向的。 (我在 User 类中有一个 cmets 列表)。
为创建表“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>
【问题讨论】:
-
Hibernate 模式导出不会为 JPA 级联生成 SQL CASCADE DELETE。
-
有办法吗?我的意思是不是手动
-
您需要自定义架构导出。 AFAIK 这并不容易,我不会仅仅为了一个项目而这样做。我也不确定我是否希望在我的项目中将 JPA 级联转换为 SQL 级联。顺便说一句,可以在 ManyToOne 上指定级联,您不需要 OnDelete 注释。
-
我只是设法让它工作。 Schema 导出可以生成 SQL CASCADE DELETES,但不能使用简单的 MySQLDialect。我不知道为什么。它用其他方言生成它们。
-
好的,谢谢,很高兴知道。
标签: java hibernate jakarta-ee persistence