2014-02-06 5 views
3

이것은 중복 일 수 있습니다. 하지만 내 문제에 대한 적절한 링크를 찾지 못했습니다. 내 탐색이 너무 나쁠 수도 있습니다. 그래서 좋은 해답이나 유용한 솔루션에 대한 링크를 원합니다. 여기 여기최대 절전 모드 하나에서 여러 개 모두 캐스케이드 부모 모드에서 하위 ID 저장 안 함

public class ConfigFields implements java.io.Serializable { 
    private Integer configFieldId; 
    private Configuration configuration; 
    private String configFieldName; 

    //getter and setter 

    @XmlTransient 
    @ManyToOne(fetch=FetchType.LAZY) 
    @JoinColumn(name="ConfigurationId") 
    public Configuration getConfiguration() { 
     return this.configuration; 
    } 

    public void setConfiguration(Configuration configuration) { 
     this.configuration = configuration; 
    } 
} 

Configuration configuration=new Configuration(); 
configuration.setConfigurationName(configName); 
List<ConfigFields> configFieldsList=new ArrayList<ConfigFields>(); 

for(int i=0;i<fieldLength;i++) { 
    ConfigFields configField=new ConfigFields(); 
// configField.setConfiguration(configuration); 

    String stringI=Integer.toString(i); 

    if(i<fieldLength-1) { 
     configField.setConfigFieldName(ENGINE_FORM+stringI); 
    } else { 
     configField.setConfigFieldName(ENGINE_TABLE+stringI); 
    } 
    configFieldsList.add(configField); 
} 

Set<ConfigFields> configFields-new HashSet<ConfigFields>(configFieldsList); 

configuration.setConfigFieldses(configFields); 

configurationService.insert(configuration); 

내가 설정 한 구성을 삽입 할 구성을 삽입 내 코드입니다 ConfigFields.java 내 Configuration.java

public class Configuration implements java.io.Serializable { 

    private Integer configurationId; 
    private String configurationName; 
    private Set<ConfigFields> ConfigFieldses = new HashSet<ConfigFields>(0); 

    //getter and setter 

    @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY, mappedBy="configuration") 
    public Set<ConfigFields> getConfigFieldses() { 
     return this.ConfigFieldses; 
    } 

    public void setConfigFieldses(Set<ConfigFields> ConfigFieldses) { 
     this.ConfigFieldses = ConfigFieldses; 
    } 
} 

입니다 ConfigFields 테이블에 configFields 세트가 있습니다. ConfigFields 테이블에는 구성 편 집표가 있어야하는 구성 ID가 있습니다. 구성 필드 집합의 경우 구성 ID는 동일합니다 (코드에서 추측 할 수있는 것처럼).

위의 코드가 작동하여 두 테이블에 모두 저장됩니다. 그러나 ConfigFields 테이블을 체크인 할 때 configurationId가 null입니다. 나는 이드를 설정하고 있지 않다. 왜? 보시다시피 ConfigFields 개체의 각 목록에서 구성 개체를 설정하지 않습니다. 그걸 설정해야합니까?

해결 방법?

답변

4

예 당신이 단련 한 것은 단방향 관계입니다. 그러나 최대 절전 모드가 양방향 관계를 유지하기 위해서는 configField로 설정 객체를 설정해야합니다.

+0

감사합니다. 일 했어. 한가지 의심 스럽지만 다른 테이블에서 하나의 구성과 다른 행을 삭제하려면 구성 ID 만 전달하면됩니까? 'Set '에 대한 주석 'cascade = CascadeType.ALL'이 작동합니까? – iCode

+0

예 구성을 삭제하면 계단식 ALL을 사용하기 때문에 모든 configFields 항목도 삭제됩니다. –

+0

알았습니다. 고맙습니다! – iCode