Ich habe zwei Tabellen: Word und Stems. Die zweite hat Feld, das ein Fremdschlüssel für Word ist. So viele Stämme können zu einem Wort gehören.Hibernate, indirekte Beziehungen Zuordnung
In Java habe ich Entities Word und Stem erstellt. Da das Wort viele Stiele haben kann und ich einige Operationen auf der Liste dieser Stiele habe, entscheide ich, diese Liste mit der entsprechenden Methode in die separate Klasse Stems zu schreiben. Objekt dieser Klasse ist in Word-Entität. Im Folgenden stelle ich, wie mein Code wie folgt aussieht:
Word.java
@Entity
@Table(name = "Word")
@Inheritance(strategy=InheritanceType.JOINED)
public abstract class Word implements Serializable{
// primary key and other columns
@Transient
protected Stems stems = new Stems();
public void setStems(List<Stem> stems) {
this.stems.setStems(stems);
}
@OneToMany(cascade=CascadeType.ALL, fetch = FetchType.EAGER, mappedBy="word")
public List<Stem> getStems() {
return stems.getStems();
}
}
Stems.java
public class Stems {
private List<Stem> stems = new ArrayList<>();
public List<Stem> getStems() {
return stems;
}
public void setStems(List<Stem> stems) {
this.stems = stems;
}
}
Stem.java
@Entity
@Table(name = "Stems")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="Type",discriminatorType=DiscriminatorType.STRING)
public abstract class Stem implements Cloneable{
@Id
@Column(name = "Stem", unique = true, nullable = false, length = 64)
private String rawStem;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "WordId", nullable = false)
private Word word;
}
Und hier kommen meine Fragen. Ist es möglich, eine HQL-Abfrage zu machen, um ein Wort mit korrekten Stielen zu erhalten? Wenn nein, wie erreichen Sie das. Vielleicht darf diese Struktur nicht funktionieren? Wie kann ich Wörter mit Stämmen hinzufügen/aktualisieren? Ich habe versucht, Array von Stämmen in Word und Word-ID in jedem Stamm und dann session.merge (Wort) verwenden, aber es funktioniert nicht.