Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.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 如何将具有共享主键的数据库模式转换为hibernate?_Java_Database_Hibernate - Fatal编程技术网

Java 如何将具有共享主键的数据库模式转换为hibernate?

Java 如何将具有共享主键的数据库模式转换为hibernate?,java,database,hibernate,Java,Database,Hibernate,我有以下postgres模式,主键定义为PK和外键: CREATE TABLE main_table( id integer NOT NULL, CONSTRAINT main_table_pk PRIMARY KEY (id), //some fields ) CREATE TABLE test( id integer NOT NULL, CONSTRAINT test_pk PRIMARAY KEY (id), CONSTRAINT test

我有以下postgres模式,主键定义为
PK
外键

CREATE TABLE main_table(
    id integer NOT NULL,
    CONSTRAINT main_table_pk PRIMARY KEY (id),
    //some fields
)

CREATE TABLE test(
    id integer NOT NULL,
    CONSTRAINT test_pk PRIMARAY KEY (id),
    CONSTRAINT test_fk FOREIGN KEY (id)
        REFERENCES main_table (id) MATCH SIMPLE
)
我想创建一个hibernate映射,自动生成相同的架构:

@Entity
public class MainTable {
    @Id private int id;

    @OneToOne
    private Test test;
}

@Entity
public class Test {
    @Id private int id;

    @OneToOne
    @PrimaryKeyJoinColumn(name = "id", foreignKey = @ForeignKey(name = "fk_id"))
    private MainTable mainTable;
}
结果:外键约束完全丢失:

CREATE TABLE test(
    id integer NOT NULL,
    CONSTRAINT test_pk PRIMARAY KEY (id)
)
为什么缺少外键约束?我能做什么

有趣的是:以下内容将在测试表中创建一个外键条目,但作为一个单独的列:

@OneToOne
@JoinColumn
private MainTable mainTable;

如果两个实体有一个主键,它们之间是否存在继承关系?实际上,它看起来像联接表继承:。根据PrimaryKeyJoinColumn,用于在联接映射策略中联接实体子类的主表。因此,如果没有继承,就不能使用PrimaryKeyJoinColumn。这是简单的忽略

您可以尝试:

  @Entity
  public class MainTable {
      @Id
      private int id;

      @OneToOne(mappedBy = "mainTable" )
      private Test test;
      .......
  }

  @Entity
  public class Test {
     @Id
     private int id;

     @OneToOne
     @JoinColumn(name = "id", foreignKey = @ForeignKey(name = "fk_id"))
     private MainTable mainTable;
     .....
 }

但是模式生成器中有一个错误——它不创建外键。您可以手动创建它。

它们是具有由相同id=主键标识的行的表。一个表应该是“根”,但我想有两个表来分隔内容。