我想知道我应该做什么,因为我已经阅读了很多文章试图理解这一点,包括许多SO问题.我读过的任何东西都没有用这个钉在头上.
我想知道当使用级联规则和应用程序定义数据库时会发生什么,因为这将定义我是否应该采用以下方法.
create table foo(
id int unsigned not null auto_increment,
primary key(id)
);
create table bar(
id int unsigned not null auto_increment,
foo_id int unsigned not null,
primary key(id),
foreign key(foo_id) references foo(id) on delete cascade on update cascade
)
Run Code Online (Sandbox Code Playgroud)
@Entity
@Table(name = "foo")
public class Foo {
private int id;
private List<Bar> bars;
@Id
@GeneratedValue
@Column(name = "id")
public int getId() {
return id;
}
@OneToMany(mappedBy = "foo", cascade = {CascadeType.ALL})
public List<Bar> getBars() { …
Run Code Online (Sandbox Code Playgroud) 我有一个实体Bar
:
@OneToMany(cascade = CascadeType.ALL, mappedBy = "bar")
private Set<Foo> fooSet;
Run Code Online (Sandbox Code Playgroud)
一个实体Foo
:
@ManyToOne(optional = false)
@JoinColumn(name = "bar_id")
private Bar bar;
Run Code Online (Sandbox Code Playgroud)
Hibernate在foo.bar - > bar.id上创建了外键约束,但它没有指定ON DELETE CASCADE
.为什么不?有没有办法实现它?
或者我可以ON DELETE CASCADE
在DB中手动添加(并禁用DDL生成),这是一个好习惯吗?而且,我是否必须以某种方式修改我的代码让Hibernate知道数据库会自动删除相关记录?
谢谢.
更新 - 这是我的JPA/Hibernate/PostgreSQL配置:
<bean id="dataSource" class="org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy">
<constructor-arg>
<bean class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="org.postgresql.Driver" />
<property name="url" value="jdbc:postgresql://localhost:5432/my_db" />
<property name="username" value="my_username" />
<property name="password" value="my_password" />
</bean>
</constructor-arg>
</bean>
<bean id="jpaAdapter" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="databasePlatform" value="org.hibernate.dialect.PostgreSQLDialect" />
<property name="showSql" value="true" />
<property …
Run Code Online (Sandbox Code Playgroud) 性能是关键:在数据库内部级联删除/更新还是让 Hibernate/JPA 处理它更好?
如果级联在 DBMS 内部,这会影响查询数据的能力吗?
如果这很重要,我正在使用 HSQLDB。
hibernate ×3
jpa ×3
java ×2
cascade ×1
database ×1
foreign-keys ×1
hsqldb ×1
mysql ×1
postgresql ×1
sql ×1