2012-09-21 3 views
0

struts 액션에서 데이터베이스에서 객체 X를 가져 와서 포함 된 일대일 컬렉션에 대한 참조를 가져 와서이 컬렉션에 몇 개의 객체를 추가하고 원래 객체 X를 저장합니다. 문제가 발생하지 않지만 하나의 many 컬렉션에서 참조하는 테이블에 추가 된 새 행이 없습니다.Hibernate 데이터베이스 업데이트가 하위에 전파되지 않음

Heres는 내 액션 코드

...

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

Heres는 내 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; 
    } 

} 

내가 내의 DAO를 생성하기 위해 최대 절전 모드 도구를 사용

@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; 
     } 

    } 

을 heres 내 DefinitionT 클래스

및 Pojos definitionTao를 사용하여 definitionT 인스턴스를 지속하면 fin을 지속합니다. 그래서 테이블의 무결성이 좋다. 왜 컬렉션을 저장하지 않았고 그렇게하지 못한 이유에 대해 어떤 오류도주지 않았습니까?

답변

1

요즘에는 OneToMany 연관에 연쇄가 없으므로 단어 엔터티에서 수행 할 수있는 작업은 해당 정의로 계단식으로 적용되지 않습니다. 더욱이, 정의 엔티티는 association의 소유자이기 때문에, Hibernate가 association을 영속화 할 수 있도록 word 속성을 설정해야한다.

+0

안녕하세요, 각 정의 인스턴스가 각 정의 인스턴스에서 설정하는 WordT가 있습니다. 나는 "일대 다 (one to many) 협회에 계단식이 없다"는 것이 무슨 뜻인지 이해하지 못합니다. 어떻게 구현합니까? – MayoMan

+0

약간의 인터넷 검색 후에 계단식을 사용하는 방법을 발견했습니다. 작동하면 답변으로 받아 들일 것입니다. 감사 – MayoMan

관련 문제