J'ai quatre entités à mapper ensemble, "Association", "Compte", "Transaction" et "TransactionEvent". L'identifiant de l'association est un simple identifiant entier. Compte et Transaction ont chacun des identifiants incorporés consistant en un mappage avec une association et un numéro. TransactionEvent devrait avoir un identifiant incorporé composé d'un compte et d'une association. Maintenant, chacun d'entre eux est mappé à une association, et je veux que ce soit la même association pour un événement de transaction. JPA Les annotations sont utilisées pour le mappage Hibernate, mais je ne peux pas faire fonctionner cela. J'ai essayé de forcer le même nom de colonne pour la clé Association, mais Hibernate se plaint de colonnes répétées.Mapper deux entités à l'aide d'une colonne de clé étrangère partagée en veille prolongée
Est-ce que c'est possible de résoudre, ou je ne pense pas directement?
Voici les classes annotées, mais j'ébarbé getters/setters et des colonnes non-id, les annotations de l'espace de noms 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;
}
compte réel, Les entités Transaction et AccountEvent sont sur le formulaire
@Entity
public class Account implements Serializable {
@EmbeddedId
private AccountPK id;
}
Quoi? Cela n'a aucun sens. Qu'est-ce qu'un Id? Comment pouvez-vous mapper deux choses à une association si elle ne contient qu'un entier? Si vous parlez de pointeurs, java n'en a pas. Le deuxième paragraphe est très confus. Qu'est-ce qu'un identifiant intégré? ... Je pourrais continuer. –
@Leo Peut-être que cela n'a aucun sens pour vous parce que vous ne savez pas Hibernate/JPA @Jon s'il vous plaît montrer vos entités annotées (même si cela ne fonctionne pas). –
@Pascal J'ai ajouté les parties pertinentes du code. J'ai essayé plusieurs variantes d'ajouter "insertable = false, updatable = false" aux annotations JoinTable. – Jon