Ciao, sto imparando la mappatura delle relazioni @ManyToMany usando JPA. Capisco più o meno come funziona, ma ho dei dubbi. Lascia che ti mostri prima questo codice dove faccio un po 'di mappatura:
@Entity
public class EntityE implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long eId;
@ManyToMany
@JoinTable(joinColumns =
@JoinColumn(name = "eId"), inverseJoinColumns =
@JoinColumn(name = "fId"))
private Collection<EntityF> entityFs;
//...
}
Vedi anche questa altra entità:
@Entity
public class EntityF implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long fId;
private Collection<EntityE> entityEs;
//...
}
Questo è ciò che ottengo nel database:
I miei dubbi sono:
-Voglio creare una relazione @ManyToMany in cui EntityE è il proprietario della relazione, questo approccio è corretto?
-Voglio che la relazione sia unidirezionale, quindisi suppone che crei una sola tabella del mediatore denominata EntityB_EntityF. Ma per qualche motivo crea anche una seconda tabella chiamata EntityF_EntityE. Non capisco perché?? È normale? e se no come devo ripararlo?
risposte:
2 per risposta № 1Ok ho appena ricevuto la risposta dopo aver fatto qualcosaesperimento. Penso che sia corretto, ora funziona come ho osservato. Quello che ho fatto è stato aggiungere un nome per la relazione, perché per qualche strana ragione se non si specifica il nome si crea una relazione bidirezionale.
Vedi questo codice risolto:
@Entity
public class EntityE implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long eId;
@ManyToMany
@JoinTable(name="entitye_entityf",joinColumns =
@JoinColumn(name = "eId"), inverseJoinColumns =
@JoinColumn(name = "fId"))
private Collection<EntityF> entityFs;
Ecco l'altra entità.
@Entity
public class EntityF implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long fId;
@ManyToMany
@JoinTable(name="entitye_entityf",joinColumns =
@JoinColumn(name = "fId"), inverseJoinColumns =
@JoinColumn(name = "eId"))
private Collection<EntityE> entityEs;
Come puoi vedere dall'immagine, sono riuscito a risolvere i miei dubbi. Spero che questa risposta possa essere utile anche per qualcun altro.