0

私のStrutsアクションでは、データベースからオブジェクトXを取得し、そこに含まれる1対多のコレクションへの参照を取得し、このコレクションにいくつかのオブジェクトを追加して、元のオブジェクトXを保存します。問題は、エラーがスローされないことです。 1 対多のコレクションによって参照されるテーブルには、新しい行が追加されません。

これが私のアクションコードです...

    public String saveSelectedDefinitions()
    {
        WordT wordT = wordDao.get(2);
        Set<DefinitionT> storedDefs = wordT.getDefinitionTs();

        for( int i=0; i<3; i++)
        {
            DefinitionT selectedDef = new DefinitionT();
            selectedDef.setValue("abc");
            selectedDef.setWordT(wordT);
            storedDefs.add(selectedDef);
        }
        wordT.setDefinitionTs(storedDefs);
        wordDao.save(wordT);

        return SUCCESS;
    }

これが私のWordTクラスです

@Entity
@Table(name = "word_t", schema = "public")
public class WordT implements java.io.Serializable {

    private int id;
    private Set<DefinitionT> definitionTs = new HashSet<DefinitionT>(0);

    public WordT() {
    }

    public WordT(int id) {
        this.id = id;
    }

    public WordT(int id,  Set<DefinitionT> definitionTs) {
        this.id = id;
        this.definitionTs = definitionTs;
    }

    @Id
    @Column(name = "id", unique = true, nullable = false)
    public int getId() {
        return this.id;
    }

    public void setId(int id) {
        this.id = id;
    }


    @OneToMany(fetch = FetchType.EAGER, mappedBy = "wordT")
    public Set<DefinitionT> getDefinitionTs() {
        return this.definitionTs;
    }

    public void setDefinitionTs(Set<DefinitionT> definitionTs) {
        this.definitionTs = definitionTs;
    }

}

ここに私の DefinitionT クラスがあります

    @Entity
    @Table(name = "definition_t", schema = "public")
    public class DefinitionT implements java.io.Serializable {

        private int id;
        private WordT wordT;

        public DefinitionT() {
        }

        public DefinitionT(int id, WordT wordT) {
            this.id = id;
            this.wordT = wordT;
        }

        public DefinitionT(int id, WordT wordT, String value, int typeId,
                Boolean selected) {
            this.id = id;
            this.wordT = wordT;
        }

        @Id
        @Column(name = "id", unique = true, nullable = false)
        public int getId() {
            return this.id;
        }

        public void setId(int id) {
            this.id = id;
        }

        @ManyToOne(fetch = FetchType.EAGER)
        @JoinColumn(name = "word_id", nullable = false)
        public WordT getWordT() {
            return this.wordT;
        }

        public void setWordT(WordT wordT) {
            this.wordT = wordT;
        }

    }

Hibernate ツールを使用して Daos と Pojo を生成しました。DefinitionDao を使用して definitionT インスタンスを永続化すると、正常に永続化されるため、テーブルの整合性は問題ありません。コレクションを保存せず、保存に失敗した理由についてエラーが表示されないのはなぜですか?

4

1 に答える 1

1

OneToMany アソシエーションにはカスケードがないため、エンティティという単語に対して行う操作は、その定義にカスケードしません。さらに、定義エンティティは関連付けの所有者であるため、関連付けを永続化するには、Hibernate の word プロパティを設定する必要があります。

于 2012-09-21T21:47:50.373 に答える