Ich habe Klassen mit JPA-Zuordnungen wie folgt:JPA einzelne Tabelle Vererbung mit abstrakten Generika und Sammlung
@Entity
@Inheritance
public abstract class FieldValue<T> {
@Id @GeneratedValue
private Long id;
public abstract T getValue();
}
@Entity
public class TextFieldValue extends FieldValue<String> {
@Column(name = "TEXT_VALUE")
private String value;
public String getValue() { return value; }
}
@Entity
public class NumberFieldValue extends FieldValue<Double> {
@Column(name = "NUMBER_VALUE")
private Double value;
public Double getValue() { return value; }
}
@Entity
public class SelectFieldValue extends FieldValue<ValueOption> {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "SELECT_VALUE")
private ValueOption value;
public ValueOption getValue() { return value; }
}
Ich bin eine einzelne Tabelle Vererbung Typ verwendet, die jeweils Wertefeld auf eine andere Spalte zuzuordnen verursacht. In SelectFieldValue ist der Wert eine Referenz auf eine andere Entität, das Mapping funktioniert jedoch weiterhin ordnungsgemäß und füllt die Spalte SELECT_VALUE mit der ID einer ValueOption.
aber ich würde auch die Klasse mit einer Liste von Unternehmen gerne hinzufügen:
@Entity
public class MultipleSelectFieldValue extends FieldValue<List<ValueOption>>{
@ManyToMany // ??
private List<ValueOption> value;
public List<ValueOption> getValue() { return value; }
}
ich die richtige Zuordnung zu finden scheinen nicht solche Liste von Einheiten zu behandeln. Ist dies mit der Vererbungsstrategie für einzelne Tabellen überhaupt möglich? Es könnte beispielsweise die Spalte für MultipleSelectFieldValue mit einer ID einer einzelnen Zeile in der Join-Tabelle füllen, die viele-zu-viele-Zuordnungen von MultipleSelectFieldValue zu ValueOption speichern würde.
Ich habe versucht, die folgende Abbildung:
@ManyToMany(fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@JoinTable(name = "field_value_value_option",
joinColumns = @JoinColumn(name = "field_value_id"),
inverseJoinColumns = @JoinColumn(name = "value_option_id"))
private List<ValueOption> value;
Aber seltsam, ist es nicht eine neue Spalte in der Tabelle hinzufügen Fieldvalue, also nicht richtig funktioniert.
@ManyToMany-Beziehung benötigt eine zusätzliche Tabelle zum Speichern der Beziehung. Also sollte dein Mapping funktionieren. Warum denkst du, dass das nicht funktionieren würde? –
Ich fühlte mich gleich, aber eine solche Zuordnung generiert keine zusätzliche Spalte für den MultipleSelectFieldValue der Tabelle. Ich habe meine Frage mit dem Code aktualisiert. –
Warum 'SINGLE_TABLE'? Mit 'JOINED' könntest du alle '@Column (name =" XXXX_VALUE ")' – pirho