0


我有 2 个表,它们的列与主键相同。尽管这些表具有与主键相同的列,但基于信息的重要性,数据在 2 个表中进行了规范化。我正在尝试通过 ORM 在 2 个表之间建立一对一的关系。以下是表和实体的结构,

表 A:input_tables

SOURCE TABLE_NAME COL1 COL2 COL3 源 1 tbl 1 xxx yyy zzz 源 2 tbl 3 ggg kkk kk 源 3 tbl 2 xxx yyy zzz 源 4 tbl 5 ggg kkk kk

表 1:input_tables

表 B:input_table_Structures

SOURCE TABLE_NAME COL4 COL5 COL6 来源 1 tbl 1 xxx yyy zzz 来源 2 tbl 3 ggg kkk kk 来源 3 tbl 2 xxx yyy zzz 来源 4 tbl 5 ggg kkk kk

表 2:input_table_structures

输入表.java

@Entity
@Table(name = "input_tables")
public class InputTable implements Serializable {

    @EmbeddedId
    private InputTablePK inputTableKey;

    @Column(name = "col1")
    private String col1;

    @Column(name = "col2")
    private String col2;

    @Column(name = "col3")
    private String col3;

    @OneToOne(fetch = FetchType.EAGER)
    @JoinColumns({@JoinColumn (name = "source",  referencedColumnName="source",insertable=false,updatable=false),
            @JoinColumn(name = "table_name", referencedColumnName="table_name",insertable=false,updatable=false)})*
    private InputTableStructure inputTableStructure;


}

输入表PK.java

@Embeddable
public class InputTablePK implements Serializable{

    @Column(name = "source")
    private String source;

    @Column(name = "table_name")
    private String tableName;

   ....


}

InputTableStructure.java

@Entity
@Table(name="input_table_structures")
public class InputTableStructure {

    @EmbeddedId
    private InputTableStruturePK inputTablesStructurKey;


    @Column(name = "col4")
    private String coalesedColumnOracle;

        @Column(name = "col5")
    private String coalesedColumnOracle;

        @Column(name = "col6")
    private String coalesedColumnOracle;


    @OneToOne(mappedBy = "inputTableStructure",fetch = FetchType.EAGER)
    private InputTable inputTable;

   ....
}

InputTableStructurePK.java

@Embeddable
public class InputTableStruturePK implements Serializable{

    @Column(name = "source")
    private String source;

    @Column(name = "table_name")
    private String tableName;

   ....


}

我有一个存储库,

@Repository
public interface InputTableRepository extends CrudRepository<InputTable,InputTablePK>{

    List<InputTable> findAll();

}

每当我尝试为 InputTable 获取数据时,都会出现以下异常,

org.hibernate.TypeMismatchException:为类 InputTableStructure 提供了错误类型的 id。预期:类 InputTableStructurePK,得到类 InputTablePK

由于这两个类具有与主键相同的列,因此我尝试在 InputTable 和 InputTableStructure 实体中使用与 EmbeddedId 相同的 Embeddable 类,即我尝试在 InputTable 和 InputTableStructure 实体中使用 InputTablePK 类作为 EmbeddedId,在此之后我收到以下信息错误,

org.postgresql.util.PSQLException:错误:列 inputtable0_.col4 不存在

我想要实现的是在两个实体之间建立一对一的关系,并通过 InputTable 查询,以获取表 input_table 的数据作为主要对象,并将表input_table_structure 的数据作为嵌套对象

如果方法中需要任何更正,请纠正我。

4

1 回答 1

0

但是实体没有相同的 @EmbededId 你不能交换它们。如果它们InputTablePK在两个实体中的用途相同。

于 2019-02-24T19:12:21.353 回答