Ich habe folgendes Problem, bei dem ich einfach nicht weiterkomme.
Ich habe die Klasse AddressLineType, für die feste vorgegebene Wert in der Datenbank eingetragen sind.
Code:
@Entity
public class AddressLineType {
@Id
public int identifier;
public String description;
}
Nun möchte ich aus der Klasse AddressLine auf diese Klasse referenzieren. Gleichzeitig ist sie dort Teil des Primärschlüssels.
Code:
@Entity
@IdClass(AddressLine.AddressLinePK.class)
public class AddressLine {
private static class AddressLinePK implements Serializable {
UUID identifier;
String name;
int generatedId;
AddressLineType addressLineType;
}
@Id
@NotNull
private UUID identifier;
@Id
@NotEmpty
private String name;
@Id
@NotNull
private int generatedId;
@Id
@NotNull
private AddressLineType addressLineType;
@NotEmpty
private String value;
}
Das von mir gewünschte Verhalten ist wie folgt.
Das Attribut addressLineType soll auf die bereits vorhandenen Werte referenzieren. Es soll nicht möglich sein, neue Objekte vom Type AddressLineType zu erzeugen, indem für das Attribut ein neues Objekt erzeugt wird. Das soll zu einem Fehler führen.
Gespeichert werden soll das Ganze in Tabellen, die so aussiehen:
Code:
CREATE TABLE ADDRESSLINETYPE (
IDENTIFIER INTEGER NOT NULL,
DESCRIPTION VARCHAR(255)
);
ALTER TABLE ADDRESSLINETYPE ADD PRIMARY KEY (IDENTIFIER);
CREATE TABLE ADDRESSLINE (
ADDRESSLINETYPE INTGER NOT NULL,
GENERATEDID INTEGER NOT NULL,
IDENTIFIER VARCHAR FOR BIT DATA(255) NOT NULL,
NAME VARCHAR(255) NOT NULL,
VALUE VARCHAR(255) NOT NULL
);
ALTER TABLE ADDRESSLINE ADD PRIMARY KEY (ADDRESSLINETYPE, GENERATEDID, IDENTIFIER, NAME);
ALTER TABLE ADDRESSLINE ADD FOREIGN KEY (ADDRESSLINETYPE) REFERENCES REFERENCES ADDRESSLINETYPE (IDENTIFIER);
Ich habe es @ManyToOne versucht, aber nicht hinbekommen.
Der momentane Zustand (s.o.), der sich auch bei @ManyToOne nicht geändert hat, ist der, dass das Objekt in ein Binärfeld serialisiert wird und keinerlei Verbindung zu der Tabelle ADDRESSLINETYPES existiert.
Wie kann ich mein gewünschtes Verhalten ereichen??