我有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
Table 2: input_table_structures
InputTable.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;
}
InputTablePK.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的数据作为主要对象,以及表< strong> input_table_structure作为嵌套对象。
如果该方法需要任何更正,请纠正我。
答案 0 :(得分:0)
但是实体没有相同的@EmbededId,因此您无法交换它们。如果它们相同,则在两个实体中使用InputTablePK
。