相关疑难解决方法(0)

JPA Hibernate - 数据库和注释中的级联删除

简要

我想知道我应该做什么,因为我已经阅读了很多文章试图理解这一点,包括许多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)

java mysql database hibernate jpa

17
推荐指数
1
解决办法
3710
查看次数

使用PostgreSQL,为什么Hibernate/JPA不会创建级联约束?

我有一个实体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)

java postgresql hibernate jpa foreign-keys

7
推荐指数
1
解决办法
8321
查看次数

使用 JPA 或数据库内部的级联删除/更新?

性能是关键:在数据库内部级联删除/更新还是让 Hibernate/JPA 处理它更好?

如果级联在 DBMS 内部,这会影响查询数据的能力吗?

如果这很重要,我正在使用 HSQLDB。

sql hibernate jpa cascade hsqldb

5
推荐指数
1
解决办法
4658
查看次数

标签 统计

hibernate ×3

jpa ×3

java ×2

cascade ×1

database ×1

foreign-keys ×1

hsqldb ×1

mysql ×1

postgresql ×1

sql ×1