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.
<code>@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 } </code>
Więc jeśli skorzystam z poniższych
<code>Team team = new Team(); team.getPlayerList().add(new Player()); team.getPlayerList().add(new Player()); session.save(team); // It works! </code>
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,