2011-12-07 2 views
2

"A", "B"및 "C"의 세 개의 열이있는 테이블이 있습니다. 이 두 열 (A와 B) 중 두 개는 테이블의 복합 기본 키입니다. 나는이 테이블을위한 Java 클래스를 작성했으며 Hibernate를 사용하여 클래스의 데이터를 테이블의 데이터에 맵핑했다. 임베디드 (즉, 복합) 키에 대해 다른 클래스를 만들었습니다.최대 절전 모드 : EmbeddedIds와 중복되는 getters/setters가 있습니까?

두 개의 클래스는 다음과 같다 :

@Entity 
@Table(name="SOME_TABLE", schema="SOME_SCHEMA") 
public class Outer { 
    private Key key; 
    private String a; 
    private String b; 
    private String c; 

    @EmbeddedId 
    public Key getId() { 
     return this.key; 
    } 

    // Also a setter for Key... 

    @Column(name="A") 
    public String getA() { 
     return this.a; 
    } 

    public void setA(final String a) { 
     this.a = a; 
    } 

    // Also setters and getters for B and C. 
} 

.

@Embeddable 
public class Key { 
    private String a; 
    private String b; 

    @Column(name="A") 
    public String getA() { 
     return this.a; 
    } 

    public void setA(final String a) { 
     this.a = a; 
    } 

    // Also a getter & setter for B. 
} 

모든 Hibernate 문서는 getter와 setter가 어디로 가야하는지 정확히 설명합니다. Outer와 Key 모두 합성 키를 구성하는 값에 대한 설정자를 가지고 있어야합니까? 두 곳 모두에 setter가 있으면 A에 대한 값을 Outer에 설정하면 Hibernate가 올바른 작업을 수행합니까? 즉 Key에 값을 설정합니까? Outer.getA/B() 및 Outer.setA/B()가 Key 클래스를 연기해야합니까?

동일한 데이터에 대해 두 곳에서 세터를 사용하는 것은 잘못된 코딩 방법이라고 생각합니다. 적어도 모호합니다. 나는 Hibernate가 나를 위해 Key 클래스의 값을 설정할 것이기를 희망하지만 확실히 알고 싶습니다. 감사!

- 조

답변

1

내가 @EmbeddedId와 확실히 100 % 아니에요하지만 난 그게 일반 @Embedded 속성과 동일한 방식으로 처리해야합니다 생각, 그래서 매핑은 다음과 같이해야한다고 생각 :

@Entity 
@Table(name="SOME_TABLE", schema="SOME_SCHEMA") 
public class Outer { 
    private Key key; 
    // no fields a and b here 
    private String c; 

    @EmbeddedId 
    public Key getId() { 
     return this.key; 
    } 

    // Also a setter for Key... 

    @Transient 
    public String getA() { 
     return this.key.getA(); 
    } 

    public void setA(final String a) { 
     this.key.setA(a); 
    } 

    @Transient 
    public String getB() { 
     return this.key.getB(); 
    } 

    public void setB(final String b) { 
     this.key.setB(b); 
    } 

    // Also setters and getters for C. 
} 
+0

감사합니다 , tscho. 나는 거의 @ Embedding을 사용하지 않기 때문에 거기에 연결하지 않았다. 내 원래의 질문에 답하기 위해 "핵심에 위임하십시오"라는 접근 방식이 있습니다. – joemadeus