2012-07-19 2 views
1

2 개의 엔티티 (뉴스와 태그)에 대해 다 대다 양방향 관계를 가지려고합니다.Hibernate/JPA 양방향 캐스케이드 saveOrUpdate

하지만 (설정했다) 뉴스를 될 saveOrUpdate하려고 할 때, 어떻게 든 항상 태그도 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; 
    } 

Tag.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; 
    } 

NewsDAO 내가 원하는 무엇

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

나는 "뉴스"를 저장할 때, 관련 세트 것입니다 태그가 존재하면 무시되고, 태그가 없다면 새로 삽입 될 것인가?

+0

태그 객체가 이미 연결되어 있습니까 (연결된 객체를 최대 절전 모드로 전환합니까?)? –

+0

웹 레이어에서만 문자열을 얻을 수 있기 때문에 뉴스에서 saveOrUpdate를 수행하기 전에 세트를 다시 만들고 (db에서 ID를 가져 와서 태그로 다시 설정해야합니다.) 최대 절전 모드가이 태그들을 인식하도록하는 방법이 있습니까? –

+1

id뿐만 아니라 db에서 객체 (Tag)를 가져 오십시오. 이미 연결된 개체를 사용하면 작동합니다. –

답변

2

문제는 (태그) 개체가 "연결"되지 않는다는 점이다 알려 주시기 바랍니다. 그건 절전 모드가 당신의 객체를 인식하지 못하고, 뉴스를 저장하려고 할 때 최대 절전 모드가 태그를 항상 새로운 객체로 보게된다는 뜻입니다. 저장하거나 업데이트하기 전에 db에서 Tag 객체를 가져 와서이 객체를 사용하십시오.