我有hibernate.hbm2ddl.auto=create-drop
设置,但在hibernate使用hibernate.import_files=db/create.sql
生成数据库之后,我还根据SQL中的一个表创建了一个视图。
下次运行hibernate时,不能删除现有表,因为视图依赖于它。
如何使hibernate drop table级联以便视图也被删除?
定义像这样的实体似乎没有效果
@Entity
@OnDelete(action = OnDeleteAction.CASCADE)
@Table(name = "MY_TABLE")
答案 0 :(得分:1)
我有完全相同的问题 - 一个视图定义(带有相应的JPA映射)阻止了其他表被删除。
对我有用的解决方案是使用 javax.persistence。* 属性,使您可以更好地控制创建/删除脚本。因此,我使用hibernate.hbm2ddl.auto
而不是使用普通javax.persistence.schema-generation.database.action
。这样我就可以先删除视图,然后引用表格。
通过使用<property name="javax.persistence.schema-generation.create-source" value="script-then-metadata"/>
,您可以将用户定义的脚本与模式自动创建结合起来。
您可以在此处详细了解这些属性:https://docs.oracle.com/javaee/7/tutorial/persistence-intro005.htm