Klasa, która zachowuje się jak @Entity i @Embeddable
Mam jednokierunkową relację @OneToMany między drużyną a klasą Gracza. Chciałbym zapisać obiekt Team wśród twoich Graczy. Identyfikator gracza JEST ZWIĄZKIEM według klucza obcego zespołu i indeksu listy w następujący sposób. Mam takie mapowanie, ponieważ muszę zapisać drużynę, a twoi gracze jedli w tym samym czasie.
@Entity
public class Team {
@Id
@GeneratedValue
private Integer id;
@CollectionOfElements
@JoinTable(
name="PLAYER",
joinColumns=@JoinColumn(name="TEAM_ID"))
@IndexColumn(name="PLAYER_INDEX")
private List<Player> playerList = new ArrayList<Player>();
}
@Embeddable
public class Player {
// Player's getter's and setter's
}
Więc jeśli skorzystam z poniższych
Team team = new Team();
team.getPlayerList().add(new Player());
team.getPlayerList().add(new Player());
session.save(team); // It works!
Zdarza się, czy używasz @CollectionsOfElements, klasa Player potrzebuje adnotacji @Embeddable, a nie @Entity. JPA nie zezwala jednocześnie na @Entity i @Embeddable. Gracz jest także @Entity - ma relacje z innymi podmiotami.
Czy ktoś wpadł na pomysł, że mógłbym uratować zespół i gracza (JEDEN RELACJE W DRODZE), używając CascadeType.PERSIST z @Entity w klasie Player zamiast @Embeddable?
Pamiętaj, że klucz podstawowy COMPOUND musi zostać przypisany przed zapisaniem, ale identyfikator zespołu i pozycja indeksu PlayerList mogą odgrywać rolę złożonego klucza podstawowego gracza
pozdrowienia,