我有兩個表:Word和Stems。第二個字段是Word的外鍵。這麼多的詞幹可以屬於一個詞。休眠,間接關係映射
在Java中,我創建了Entities Word和Stem。因爲單詞可以有很多詞幹,而且我在這個詞幹的列表上有一些操作,所以我決定把這個列表與對應的方法放在單獨的名爲Stems的類中。這個類的對象是在Word實體中。下面我介紹我的代碼看起來像:
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;
}
這裏來了我的問題。是否有可能使HQL查詢獲得正確的詞幹?如果沒有那麼如何實現這一點。也許這個結構不允許工作?如何添加/更新詞幹?我嘗試在每個詞幹中設置單詞和單詞id中的詞幹數組,然後使用session.merge(單詞),但它不起作用。