У меня есть 2 таблицы, которые имеют те же столбцы, что и первичный ключ.Несмотря на то, что таблицы имеют те же столбцы, что и первичный ключ, исходя из значимости информации, данные нормализуются по 2 таблицам.Я пытаюсь установить отношения один к одному между двумя таблицами через ORM.Ниже приведены структура таблиц и сущностей,
Таблица A: input_tables
SOURCE TABLE_NAME COL1 COL2 COL3 источник 1 tbl 1 xxx yyy zzz источник 2 tbl 3 ggg kkk kk источник 3 tbl 2xxx yyy zzz источник 4 tbl 5 ggg kkk kk
Таблица 1: input_tables
Таблица B: input_table_Structures
ИСТОЧНИК TABLE_NAME COL4 COL5 COL6 источник 1 tbl1 xxx yyy zzz source 2 tbl 3 ggg kkk kk source 3 tbl 2 xxx yyy zzz source 4 tbl 5 ggg kkk kk
Таблица 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.Ожидается: класс InputTableStructurePK, получен класс InputTablePK
Поскольку оба класса имеют одинаковые столбцы в качестве первичного ключа, я попытался использовать один и тот же класс Embeddable как EmbeddedId в объектах InputTable и InputTableStructure, т.е. я пытался использоватьКласс InputTablePK как EmbeddedId в объектах InputTable и InputTableStructure, при котором я получаю следующую ошибку:
org.postgresql.util.PSQLException: ОШИБКА: столбец inputtable0_.col4 не существует
То, чего я пытаюсь добиться, - это установить взаимно-однозначное отношение между обоими сущностями и выполнить запрос по InputTable, чтобы извлечь данные из таблицы input_table в качестве основного объекта и данные таблицы input_table_structure как вложенный объект .
Пожалуйста, исправьте меня, если есть какие-либо исправления, необходимые в подходе.