У меня есть четыре объекта для сопоставления: «Ассоциация», «Учетная запись», «Транзакция» и «TransactionEvent». Идентификатор ассоциации - это простой целочисленный идентификатор. Учетная запись и транзакция имеют встроенные идентификаторы, состоящие из сопоставления с ассоциацией и номером.
TransactionEvent должен иметь встроенный идентификатор, состоящий из одной учетной записи и одной ассоциации. Теперь каждый из них сопоставлен с Ассоциацией, и я хочу, чтобы это была одна и та же Ассоциация для одного TransactionEvent.
JPA Annotations используется для отображения Hibernate, но я не могу сделать эту работу. Я пытался принудительно использовать одно и то же имя столбца для ключа ассоциации, но Hibernate жалуется на повторяющиеся столбцы.
Возможно ли это решить, или я не думаю прямо?
Вот аннотированные классы, но я обрезал методы получения / установки и столбцы без идентификаторов, аннотации из пространства имен javax.persistence:
@Entity
public class Association implements Serializable {
@Id @GeneratedValue(strategy = GenerationType.AUTO)
private long id;
}
@Embeddable
public class AccountPK implements Serializable {
@ManyToOne(optional=false)
private Association association;
@Column(nullable=false)
private int number;
}
@Embeddable
public class TransactionPK implements Serializable {
@ManyToOne
private Association association;
@GeneratedValue(strategy=GenerationType.AUTO)
private long number;
}
@Embeddable
public class AccountEventPK implements Serializable {
@ManyToOne(optional=false)
@JoinColumns({
@JoinColumn(name="association_id", referencedColumnName="association_id"),
@JoinColumn(name="account_number", referencedColumnName="number")
})
private Account account;
@ManyToOne(optional=false)
@JoinColumns({
@JoinColumn(name="association_id", referencedColumnName="association_id"),
@JoinColumn(name="transaction_number", referencedColumnName="number")
})
private Transaction transaction;
}
Фактическая сущность Account, Transaction и AccountEvent находятся в форме
@Entity
public class Account implements Serializable {
@EmbeddedId
private AccountPK id;
}