У меня есть вопрос, похожий на @ ManyToMany без таблицы соединений (устаревшая база данных) с дополнительной проблемой.
У меня есть две таблицы A
и B
A
с первичным ключом из нескольких столбцов (ID
и ID2
) B
с первичным ключом из нескольких столбцов (ID
и ID3
)
Строка в A
может ссылаться на несколько строк в B
(B.ID = A.ID
), а на строку в B
могут ссылаться несколько строк в A
.
EDIT : база данных является устаревшей базой данных только для чтения, которую я не могу изменить.Мне не нужно отображать отношения с JPA (я мог бы просто сделать это в своей программной логике с дополнительными выборами), но было бы неплохо.
Это в основном отношения многие ко многим без таблицы соединений,Поскольку, что касается связанного вопроса, мне просто нужно прочитать таблицы, я попытался с двумя отношениями один-ко-многим в обоих классах.
Дополнительная проблема, которую я имею, состоит в том, что оба ID
s использовалидля объединения не первичный ключ.
У меня есть следующие классы:
@Entity
@Table( name = "A" )
@IdClass( PrimaryKeysA.class )
public class A {
@Id
@Column( name = "ID", insertable = false, updatable = false, columnDefinition = "char" )
private String id;
@Id
@Column( name = "ID2", insertable = false, updatable = false )
private int id2;
@OneToMany( cascade = CascadeType.ALL )
@JoinColumn( name = "ID", columnDefinition = "char", referencedColumnName = "ID" )
private Set< B > setOfBs;
}
@Entity
@Table( name = "B" )
@IdClass( PrimaryKeysB.class )
public class B {
@Id
@Column( name = "ID", insertable = false, updatable = false, columnDefinition = "char" )
private String id;
@Id
@Column( name = "ID3", insertable = false, updatable = false )
private int id3;
@OneToMany( cascade = CascadeType.ALL )
@JoinColumn( name = "ID", columnDefinition = "char", referencedColumnName = "ID" )
private Set< A > setOfAs;
}
Hibernate генерирует следующую ошибку:
Exception while preparing the app : referencedColumnNames(ID) of package.B referencing package.A not mapped to a single property
Я не оченьполучить сообщение: B.id
ссылается на одно свойство в A
(A.id
).
РЕДАКТИРОВАТЬ: по запросу:
public class PrimaryKeysA implements Serializable {
private static final long serialVersionUID = 1L;
private int id1;
private int id2;
// getters/setters/equals/hashcode
}
PrimaryKeysB
аналогично id3 вместоиз id2.Оба класса A
и B
являются упрощенными (анонимными) примерами.