1

2 つのエンティティ (ニュースとタグ) に対して多対多の双方向関係を構築しようとしています。

しかし、ニュース(セットを持っている)を保存または更新しようとすると、タグにIDがすでに入力されていても、どういうわけか常にタグの新しいセットが保存されます

私の注釈に何か問題がありますか?

News.java

    @Id
    @GeneratedValue(generator = "increment")
    @GenericGenerator(name = "increment", strategy = "increment")
    @Column(name = "NEWS_ID")
    public Long getId() {
        return id;
    }

    @ManyToMany(fetch = FetchType.LAZY,  cascade = {CascadeType.PERSIST, CascadeType.MERGE})
    @Cascade( org.hibernate.annotations.CascadeType.SAVE_UPDATE )
    @JoinTable(name = "NEWS_TAGS", joinColumns = @JoinColumn(name = "NEWS_ID"), inverseJoinColumns = @JoinColumn(name = "TAG_ID"))
    public Set<Tag> getTags() {
        return tags;
    }

タグ.java

    @Id
    @GeneratedValue(generator = "increment")
    @GenericGenerator(name = "increment", strategy = "increment")
    @Column(name = "TAG_ID")
    public Long getId() {
        return id;
    }

    private Collection<News> news;

    @JsonIgnore
    @ManyToMany(cascade = { CascadeType.PERSIST, CascadeType.MERGE }, mappedBy = "tags")
    public Collection<News> getNews() {
        return news;
    }

ニュースDAO

public void save(News news){
         this.hibernateSessionFactory.getCurrentSession().saveOrUpdate(news);
    }

私がやりたいのは、「ニュース」を保存すると、タグが存在する場合は関連するセットが無視され、タグが存在しない場合は新しいものを挿入することです。これは可能ですか?

お知らせ下さい

4

1 に答える 1

2

問題は、オブジェクト (タグ) が「接続」されていないことです。つまり、休止状態はオブジェクトを認識せず、ニュースを保存しようとすると、休止状態はタグを常に新しいオブジェクトとして認識します。保存または更新する前に db から Tag オブジェクトを取得して、このオブジェクトを使用してみてください。

于 2012-07-24T13:03:43.643 に答える