У меня есть объект Bar
:
@OneToMany(cascade = CascadeType.ALL, mappedBy = "bar")
private Set<Foo> fooSet;
И объект Foo
:
@ManyToOne(optional = false)
@JoinColumn(name = "bar_id")
private Bar bar;
Hibernate создает ограничение внешнего ключа для foo.bar -> bar.идентификатор, но он не указывает ON DELETE CASCADE
.Почему бы и нет?И есть ли способы добиться этого?
В качестве альтернативы я могу добавить ON DELETE CASCADE
вручную в БД (и отключить генерацию 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 name="generateDdl" value="true" />
</bean>
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="jpaVendorAdapter" ref="jpaAdapter" />
<property name="jpaProperties">
<props>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
<property name="dataSource" ref="dataSource" />
</bean>
Обновление 2 - уточнил, что я имею в виду: ограничение внешнего ключа создано, но мне интересно, почему оно не указывает ON DELETE CASCADE
(изменилОригинальный вопрос соответственно)