/ / JPA dubbi sulla mappatura di @ManyToMany - java, java-ee, jpa, orm, java-ee-6

JPA dubita della mappatura di @ManyToMany - java, java-ee, jpa, orm, java-ee-6

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:

inserisci la descrizione dell'immagine qui

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 № 1

Ok 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.

inserisci la descrizione dell'immagine qui