2016-04-01 7 views
0

WordとStemの2つのテーブルがあります。 2番目のフィールドには、Wordの外部キーであるフィールドがあります。多くの茎は1つの単語に属することができます。Hibernate、間接リレーションシップマッピング

Javaでは、エンティティの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(word)を使用しましたが、動作しません。

答えて

関連する問題