Java Hibernate无法在具有@OneToOne关系的不同模式中自动创建表

Java Hibernate无法在具有@OneToOne关系的不同模式中自动创建表,java,spring,hibernate,postgresql,jpa,Java,Spring,Hibernate,Postgresql,Jpa,我想在不同模式的两个表之间创建@OneToOne关系。我正在使用Spring、JPA、Hibernate和PostgreSQL。我想做的事情的精简版本: @Entity @Table(schema="security") public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; // ... other stuff ... }

我想在不同模式的两个表之间创建@OneToOne关系。我正在使用Spring、JPA、Hibernate和PostgreSQL。我想做的事情的精简版本:

@Entity
@Table(schema="security")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    // ... other stuff ...
}

// -------------------------------------

@Entity
@Table(schema="hr")
public class Employee {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    @OneToOne(cascade = CascadeType.ALL, optional = false)
    @JoinColumn(name="idUser", nullable=false)
    private User user;

    // ... other stuff ...
}
这将在hibernate尝试创建所有内容时生成异常(org.springframework.beans.factory.BeanCreationException),原因是:

Caused by: org.hibernate.tool.schema.spi.SchemaManagementException: Unable to execute schema management to JDBC target [alter table hr.employee add constraint FKfx9f6f9b8j7bno8r8unvb21ir foreign key (id_user) references security.user]
    at org.hibernate.tool.schema.internal.TargetDatabaseImpl.accept(TargetDatabaseImpl.java:59)
    at org.hibernate.tool.schema.internal.SchemaMigratorImpl.applySqlString(SchemaMigratorImpl.java:371)
    at org.hibernate.tool.schema.internal.SchemaMigratorImpl.applySqlStrings(SchemaMigratorImpl.java:360)
    at org.hibernate.tool.schema.internal.SchemaMigratorImpl.applyForeignKeys(SchemaMigratorImpl.java:325)
    at org.hibernate.tool.schema.internal.SchemaMigratorImpl.doMigrationToTargets(SchemaMigratorImpl.java:157)
    at org.hibernate.tool.schema.internal.SchemaMigratorImpl.doMigration(SchemaMigratorImpl.java:59)
    at org.hibernate.tool.hbm2ddl.SchemaUpdate.execute(SchemaUpdate.java:129)
    at org.hibernate.tool.hbm2ddl.SchemaUpdate.execute(SchemaUpdate.java:97)
    at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:481)
    at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:444)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:802)
    ... 17 more
Caused by: org.postgresql.util.PSQLException: ERROR: schema "security" does not exist
    at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2270)
    at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1998)
    at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:255)
    at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:570)
    at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:406)
    at org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:334)
    at com.mchange.v2.c3p0.impl.NewProxyStatement.executeUpdate(NewProxyStatement.java:410)
    at org.hibernate.tool.schema.internal.TargetDatabaseImpl.accept(TargetDatabaseImpl.java:56)
    ... 27 more
原因:org.hibernate.tool.schema.spi.SchemaManagementException:无法对JDBC目标执行架构管理[alter table hr.employee add constraint FKfx9f6f9b8j7bno8r8unvb21ir外键(id\U user)引用安全性.user]
位于org.hibernate.tool.schema.internal.TargetDatabaseImpl.accept(TargetDatabaseImpl.java:59)
位于org.hibernate.tool.schema.internal.SchemaMigratorImpl.applySqlString(SchemaMigratorImpl.java:371)
位于org.hibernate.tool.schema.internal.SchemaMigratorImpl.applySqlStrings(SchemaMigratorImpl.java:360)
位于org.hibernate.tool.schema.internal.SchemaMigratorImpl.applyForeignKeys(SchemaMigratorImpl.java:325)
位于org.hibernate.tool.schema.internal.SchemaMigratorImpl.domigrationTargets(SchemaMigratorImpl.java:157)
位于org.hibernate.tool.schema.internal.SchemaMigratorImpl.doMigration(SchemaMigratorImpl.java:59)
位于org.hibernate.tool.hbm2ddl.SchemaUpdate.execute(SchemaUpdate.java:129)
位于org.hibernate.tool.hbm2ddl.SchemaUpdate.execute(SchemaUpdate.java:97)
位于org.hibernate.internal.sessionfactorympl。(sessionfactorympl.java:481)
位于org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:444)
位于org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:802)
... 还有17个
原因:org.postgresql.util.PSQLException:错误:架构“安全性”不存在
位于org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2270)
位于org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1998)
位于org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:255)
位于org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:570)
位于org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:406)
位于org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:334)
在com.mchange.v2.c3p0.impl.NewProxyStatement.executeUpdate(NewProxyStatement.java:410)上
位于org.hibernate.tool.schema.internal.TargetDatabaseImpl.accept(TargetDatabaseImpl.java:56)
... 还有27个
如果我手动创建表,一切都正常。如果我将两个表放在同一个模式中,一切都会正常工作

如果在没有Employee实体的情况下运行一次,将创建用户表,在第二次运行中,将成功创建员工


有什么办法解决这个问题吗?有没有办法告诉hibernate创建表的顺序?

你能提供你的hibernate-Mapping.xml吗?@VA31没有。。。我只使用注释来定义实体hibernate.hbm2ddl.auto的值是多少?@Alex hbm2ddl.auto被设置为更新。我也尝试过使用create,结果也一样。你能提供你的Hibernate-Mapping.xml吗?@VA31没有。。。我只使用注释来定义实体hibernate.hbm2ddl.auto的值是多少?@Alex hbm2ddl.auto被设置为更新。我也尝试过使用create,效果也一样。