/ / WZP ma wątpliwości co do mapowania @ManyToMany - java, java-ee, jpa, orm, java-ee-6

JPA wątpi w mapowanie @ManyToMany - java, java-ee, jpa, orm, java-ee-6

Cześć, uczę się o mapowaniu relacji @ManyToMany za pomocą JPA. Mniej więcej rozumiem, jak to działa, ale mam wątpliwości. Pokażę Ci najpierw ten kod, w którym wykonuję mapowanie:

@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;
//...
}

Zobacz także ten inny byt:

@Entity
public class EntityF implements Serializable {

private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long fId;
private Collection<EntityE> entityEs;
//...
}

Oto, co otrzymuję w bazie danych:

wprowadź opis obrazu tutaj

Moje wątpliwości to:

-Chcę utworzyć relację @ManyToMany, w której EntityE jest właścicielem relacji, czy to podejście jest prawidłowe?

-Chcę, aby związek był jednokierunkowy, więcma stworzyć tylko jedną tabelę mediatora o nazwie EntityB_EntityF. Ale z jakiegoś powodu tworzy także drugą tabelę o nazwie EntityF_EntityE. Nie rozumiem, dlaczego tak jest? Czy to normalne? a jeśli nie, to jak to naprawić?

Odpowiedzi:

2 dla odpowiedzi № 1

Ok, właśnie dostałem odpowiedź po zrobieniu trochęeksperyment. Myślę, że to jest poprawne, teraz działa tak, jak zauważyłem. Dodałem nazwę relacji, ponieważ z jakiegoś dziwnego powodu, jeśli nie podasz nazwy, tworzy ona relację dwukierunkową.

Zobacz ten kod to naprawił:

@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;

Oto inny byt.

@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;

Jak widać na zdjęciu, udało mi się rozwiać moje wątpliwości. Mam nadzieję, że ta odpowiedź może być przydatna także dla kogoś innego.

wprowadź opis obrazu tutaj