Я получил устаревшую базу данных, в которой (к сожалению) внешние ключи размещаются редко.Если я создаю свой собственный внешний ключ (столбец A.testnr указывает на B.nummer) в Java Hibernate использует первичный ключ A (столбец ID), что приводит (как и ожидалось) к ошибке.
Я прочитал, что мне нужно поместить mappedBy-Reference в столбец класса B. Первичный ключ в классе B - это число, я попытался изменить его на Set (A), но затем я получаю некоторыепостоянная ошибка.
Отображение ManyToOne-Relation - A.testnr -> B.nummer
Class A
@Id
@Column(name = "NUMMER", unique = true, nullable = false, precision = 22,
scale = 0)
public BigDecimal getNummer() {
return this.nummer;
}
public void setNummer(BigDecimal nummer) {
this.nummer = nummer;
}
@ManyToOne
@JoinColumn(name = "nummer", referencedColumnName = "nummer")
public B getTestnr() {
return this.testnr;
}
public void setTestnr(B testnr) {
this.testnr = testnr;
}
Class B
@Id
@Column(name = "NUMMER", unique = true, nullable = false, precision = 22,
scale = 0)
public BigDecimal getNummer() {
return this.nummer;
}
public void setNummer(BigDecimal nummer) {
this.nummer = nummer;
}
Сообщение об ошибке: javax.persistence.EntityNotFoundException по понятной причине не является первичным ключом в A (A.nummer)часть B.nummer.
Как я уже говорил, я попытался использовать MappedBy-Reference и изменил BigDecimal PK в классе B на Set (A).
@Id
@OneToMany(fetch = FetchType.EAGER, mappedBy = "testnr")
@Column(name = "NUMMER", unique = true, nullable = false, precision = 22,
scale = 0)
public Set<A> getNummern() {
return this.nummern;
}
public void setNummern(Set<A> nummern) {
this.nummern = nummern;
}
С этим изменением я получаю ошибку времени выполнения, вероятно, из-за расхождений в слое постоянства.
Моя цель - сопоставить не первичный ключ с первичным ключом другого класса, даже с помощью hibernate, или это ситуация, когда я вынужден использовать нативный sql?