Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 休眠hbm2ddl.auto创建/更新跳过视图_Java_Spring_Hibernate_View_Hbm2ddl - Fatal编程技术网

Java 休眠hbm2ddl.auto创建/更新跳过视图

Java 休眠hbm2ddl.auto创建/更新跳过视图,java,spring,hibernate,view,hbm2ddl,Java,Spring,Hibernate,View,Hbm2ddl,我有一个映射到数据库视图的实体,例如 @Entity @Immutable @Table(name = "my_view") public class MyView { // some properties and getters } 我的sql挂件就像是create view my_view as select*,这是一个愚蠢的逻辑 在我的生产环境中,它就像一个魔咒。 现在,在我的集成测试中,我使用Hibernate属性Hibernate.hbm2ddl.auto=update动态地使用H

我有一个映射到数据库视图的实体,例如

@Entity
@Immutable
@Table(name = "my_view")
public class MyView {
 // some properties and getters
}
我的sql挂件就像是
create view my_view as select*,这是一个愚蠢的逻辑

在我的生产环境中,它就像一个魔咒。 现在,在我的集成测试中,我使用Hibernate属性Hibernate.hbm2ddl.auto
=
update
动态地使用HSQL中的DbUnit创建数据库设置。因为我没有直接将实体表标记为视图,所以hibernate尝试创建数据库

我可以通过使用flyway和添加迁移脚本来修复此问题

drop table if exists my_view;
create view my_view AS ....;
首先,它是有效的

但是:在构建我的项目时,我遇到了很多例外

2019-11-29 14:03:43,023  WARN  ExceptionHandlerLoggedImpl:handleException:27 GenerationTarget encountered exception accepting command : Error executing DDL "alter table my_view add constraint FKj50dxtl46l99jfi90uf4df7vo foreign key (other_table_id) references fonds" via JDBC Statement
org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL "alter table my_view add constraint FKj50dxtl46l99jfi90uf4df7vo foreign key (other_table_id) references other_table" via JDBC Statement
    at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:67)
    at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.applySqlString(AbstractSchemaMigrator.java:559)
    at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.applySqlStrings(AbstractSchemaMigrator.java:504)
    at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.applyForeignKeys(AbstractSchemaMigrator.java:433)
    at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.performMigration(AbstractSchemaMigrator.java:249)
    at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.doMigration(AbstractSchemaMigrator.java:114)
    at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:184)
    at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:73)
    at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:315)
    at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:462)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:708)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:724)
    at org.springframework.orm.hibernate5.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:615)
....
2019-11-29 14:03:43023警告异常HandlerLoggeDimpl:handleException:27 GenerationTarget遇到异常接受命令:执行DDL“alter table my_view add constraint FKj50dxtl46l99jfi90uf4df7vo外键(其他_table_id)references fonds”时出错通过JDBC语句
org.hibernate.tool.schema.spi.CommandAcceptanceException:通过JDBC语句执行DDL“alter table my_view添加约束FKj50dxtl46l99jfi90uf4df7vo外键(其他_表id)引用其他_表”时出错
位于org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:67)
位于org.hibernate.tool.schema.internal.AbstractSchemaMigrator.applySqlString(AbstractSchemaMigrator.java:559)
位于org.hibernate.tool.schema.internal.AbstractSchemaMigrator.applySqlStrings(AbstractSchemaMigrator.java:504)
位于org.hibernate.tool.schema.internal.AbstractSchemaMigrator.applyForeignKeys(AbstractSchemaMigrator.java:433)
位于org.hibernate.tool.schema.internal.AbstractSchemaMigrator.performMigration(AbstractSchemaMigrator.java:249)
位于org.hibernate.tool.schema.internal.AbstractSchemaMigrator.doMigration(AbstractSchemaMigrator.java:114)
位于org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:184)
位于org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:73)
位于org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:315)
位于org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:462)
位于org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:708)
位于org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:724)
位于org.springframework.orm.hibernate5.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:615)
....
这是一个)有点令人不安和b)使我紧张,这可能会打破(近期)的未来

您知道如何使用hibernate.hbm2ddl.auto跳过创建特定的表dispite吗


提前谢谢

在这种情况下,我将使用@Subselect而不是@Table()

关于文件@Subselect

将不可变只读实体映射到给定的SQL select 表情


你能让它工作吗?如果是这样,您是如何设置dbUnit数据集来为视图提供数据的?我试着像普通表一样包含它,结果出现org.dbunit.dataset.NoSuchTableException错误。正如接受的答案所建议的,我使用注释\@Subselect(“从我的视图中选择*”)。这就是诀窍。仅供参考,我也使用注释\@Entity和\@immutable我做同样的事情。如果查看数据库日志,hibernate是否在部署过程中创建“my_view”表?如果清除hibernate创建的.script,会有什么不同吗?我遇到的一个问题是,在我将其更改为视图之前,脚本最初包含了一个表的create查询,因此一切“似乎”都正常工作。但是,一旦我删除了脚本,视图就不再被添加,因此dbunit无法找到要填充的表。hibernate不会自动创建任何表/视图。我添加了一个init脚本,并在编译和测试执行之间手动创建视图