我有 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
表 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
输入表.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 的数据作为嵌套对象。
如果方法中需要任何更正,请纠正我。