J'ai une question pour la conception du ManyToMany dans EJB, comment un jointable peut-il avoir une propriété?
Voici un exemple, les étudiants et les cours sont ManyToMany, chaque étudiant a beaucoup de cours, et beaucoup d'étudiants choisissent un cours. Toutefois, si j'ai une propriété dans le JoinTable, par exemple, chaque étudiant a un score pour un cours. Comment puis-je faire en EJB avec ManyToMany?
Un grand merci pour votre attention!
JPA ManyToMany, comment JoinTable peut-il avoir une propriété?
10
A
Répondre
4
Ce n'est pas possible, vous ne pouvez pas ajouter de propriété à la relation. Si vous devez accéder à la propriété dans la table de jointure, cette propriété appartient à une entité et, par conséquent, vous avez besoin d'une entité tierce.
3
C'est possible.
Vous avez juste besoin de remplacer le mappage plusieurs-à-plusieurs par la combinaison explicite de mappages un-à-plusieurs et plusieurs-à-un via une troisième entité, qui représenterait l'association entre les deux entités principales bien sûr dans votre exemple).
S'il vous plaît lire les détails here
0
Entités avec beaucoup de nombreuses relations (commerçants et services). Ceci peut être réalisé en utilisant une troisième entité comme suit: -
@Entity
@Table(name = "merchant")
public class Merchant implements java.io.Serializable {
@OneToMany(fetch = FetchType.LAZY, mappedBy = "pk.merchant",targetEntity = MerchantService.class)
private Set<MerchantService> merchantServices = new HashSet<>();
}
@Entity
@Table(name = "merchant_service")
@AssociationOverrides({
@AssociationOverride(name = "pk.merchant",
joinColumns = @JoinColumn(name = "merchant_id")),
@AssociationOverride(name = "pk.service",
joinColumns = @JoinColumn(name = "service_id")) })
public class MerchantService implements java.io.Serializable {
@EmbeddedId
private MerchantServiceId pk = new MerchantServiceId();
private boolean isActive;
public MerchantServiceId getPk() {
return pk;
}
public void setPk(MerchantServiceId pk) {
this.pk = pk;
}
@Transient
public Service getService() {
return getPk().getService();
}
@Transient
public Merchant getMerchant() {
return getPk().getMerchant();
}
public boolean isActive() {
return isActive;
}
public void setActive(boolean isActive) {
this.isActive = isActive;
}
}
@Embeddable
public class MerchantServiceId implements java.io.Serializable {
private Merchant merchant;
private Service service;
@ManyToOne
public Merchant getMerchant() {
return merchant;
}
@ManyToOne
public Service getService() {
return service;
}
}
@Entity
@Table(name = "service")
public class Service implements java.io.Serializable {
@OneToMany(fetch = FetchType.LAZY, mappedBy = "pk.service",targetEntity = MerchantService.class)
private Set<MerchantService> merchantServices = new HashSet<>();
}
Questions connexes
- 1. relation ManyToMany avec joinTable
- 2. JPA @JoinTable - Trois colonnes d'ID
- 3. JPA. JoinTable et deux JoinColumns
- 4. JPA mappings unidirectionnels ManyToMany
- 5. JPA/Hibernate: ManyToMany delete relation
- 6. Mapping ManyToMany dans JPA
- 7. Mappage unidirectionnel JPA manytomany
- 8. JPA ManyToMany ne peuplant pas la propriété d'objet
- 9. Hibernate manytomany @JoinTable + @SecondaryTable entrées en double
- 10. ManyToMany JPA fetch
- 11. JPA @ManyToMany d'un seul côté?
- 12. @ManyToMany JPA 2 requête complexe
- 13. problème JPA ManyToMany
- 14. JPA - Sélectionner le champ ManyToMany
- 15. JPA deux entités utilisant le même @JoinTable
- 16. JPA utilisant @JOINTABLE avec des @JOINCOLUMN supplémentaires
- 17. JPA oneToMany avec List et JoinTable
- 18. Mise en veille prolongée ManyToMany avec joinTable supprimer la propagation
- 19. JPA Predicate ManyToMany avec Map
- 20. Hibernate, JPA - exemple manytomany avec deux tables
- 21. JPA ManyToMany numéro de référence
- 22. JPA, Comment insérer de nouvelles entités avec relation ManyToMany?
- 23. JPA - Multiple ManyToMany Listes du même type dans une entité
- 24. Comment faire correctement une table de jointure manytomany dans JPA?
- 25. Comment supprimer des enregistrements de joinTable qui a plusieurs à plusieurs JPA
- 26. Hibernate JoinTable
- 27. Tableau de jointure vide résultant de JPA ManyToMany
- 28. Comment faire mappage d'annotation JoinTable
- 29. Critères Jpa pour les relations ManyToMany et OneToOne
- 30. Comment puis-je stocker une structure arborescente dans JPA?
Si votre relation a la propriété, alors vous devriez le modèle comme entité. Cette question est presque identique: http://stackoverflow.com/questions/7602386/mapping-value-in-junction-table-to-entity/7603036#7603036 Même le nom de l'entité représentant la relation (CourseAssignment) correspond assez bien à votre Cas. –
Ce n'est pas possible, vous ne pouvez pas ajouter de propriété à la relation. Si vous devez accéder à la propriété dans la table de jointure, cette propriété appartient à une entité et, par conséquent, vous avez besoin d'une entité tierce. –
désolé, j'ai corrigé cela. J'ai juste une autre question, quand j'ai utilisé une classe @Embeddable comme PK pour jointable, ça ne marche pas (compilation échouée), quelqu'un a dit que JPA2.0 ne supporte pas ça! S'il vous plaît regardez cela [jpa-eclipselink-manytomany-with-dat] (http://stackoverflow.com/questions/4013397/jpa-eclipselink-manytomany-with-data), est-il possible de le faire fonctionner? – seaguest