JPA - shared primary key


jackochan

Neues Mitglied
Ich entwickele eine Spring-Boot-Anwendung mit JPA und Eclipselink.
Ich habe zwei Entitiy-Klassen --> "Player" und "PlayerSettings"

Die Entity-Klasse Player hat folgende Atrributen

Player.class
Java:
@Id
@Column(name="player_id")
private Integer id;

@Column(name="full_name")
private String name;

@Column(name="Age")
private String age;
Nun will ich die Entity-Klasse PlayerSettings so ähnlich aufbauen

PlayerSettings.class
Java:
@Id
@Column(name="player_id") // Das sollte PK und FK zu "player_id" sein
private Player player;

@Column(name="player_settings")
private List<String> settings;
Das Problem mit der PlayerSettings-Klasse ist, dass "Id" in diesem Fall nicht "serializable" ist und daher dies zu Fehler führt.
Kennt ihr hierfür vllt. gute Lösungen ?
Also ich will von der PlayerSettingsService-Klasse aus durch Setzen der Attributenwerte player und settings das PlayerSettings-Entity einfach persistieren (also ohne die player_id explizit geholt wird und gesetzt wird.

Vielen Dank !
 

Hinweis: Wenn du jetzt Java lernen möchtest, dann schau dir diese kurze Präsentation hier an (hier klicken!)
Sichere dir hier den Zugriff auf umfangreiches Java-Know How und starte richtig durch!

Hinweis: Wenn du jetzt Java lernen möchtest, dann schau dir diese kurze Präsentation hier an (hier klicken!)
Sichere dir hier den Zugriff auf umfangreiches Java-Know How und starte richtig durch!

Thallius

Bekanntes Mitglied
Das ist halt der Nachteil von diesem ganzen OOP Aufsätzen für am Ende doch nur relationale Datenbanken. Man wird unflexibel und muss unnötige Implementationen benutzen wenn man sich nicht furchtbar verrenken will...
 

stg

Bekanntes Mitglied
(also ohne die player_id explizit geholt wird und gesetzt wird.
Die kennst du doch ... die steht in "Player" doch drin.

Insgesamt könnte das grob skizziert etwa so ausschauen:

Java:
class Player {
    @Id
    @Column(name="player_id")
    private Integer id;
}

class PlayerSettings {
   @Id
   @Column(name = "player_id")
   private Integer id;

   @OneToOne
   @PrimaryKeyJoinColumn(name="player_id", referencedColumnName="player_id")
   private Player player;

   public PlayerSettings(Player player) {
       this.id = player.getId();
       this.player = player;
   }
}
 

Passende Stellenanzeigen aus deiner Region:


Neue Themen

Oben