2014-09-20 2 views
0

데이터베이스 테이블에 내용이 Y 또는 N (CHECK 제약 조건) 일 수있는 CHAR(1) 열이 있습니다. 자바에서 String 속성을 정의하고 클래스에서 String 기반 setter를 정의했습니다. 또한 편리 성을 위해 boolean 인수를 가진 @Transient setter/getter를 추가했습니다.Hibernate는 setter/getters를 속성에 어떻게 매핑합니까?

내 기대는 Hibernate가 데이터베이스 액세스를 위해 String 기반 setter/getter를 사용한다는 것이었다. 그러나 런타임시 IllegalArgumentExceptions 및 부울 및 문자열 간의 형식 불일치가 발생합니다.

따라서, Hibernate가 mappping을 수행하는 속성에 기반하여? 메소드 이름? 인자 이름? 인수 유형? setter에서 final을 사용하는 것이 좋습니까? 아니면 소문이 날 수 있습니까? 내 재산이 저의 테이블 열과 다른 이름을 가진다면 어떤 차이가 있습니까? 그들을 위해 다른 이름을 사용하려고 -

private String foobar = "N"; 

public void setFoobar(final String foobar) { 
    this.foobar = foobar; 
} 

@Column(name = "FOOBAR") 
public String getFoobar() { 
    return this.foobar; 
} 

@Transient 
public void setFoobar(final boolean foobar) { 
    this.setFoobar(foobar ? "Y" : "N"); 
} 

@Transient 
public boolean isFoobar() { 
    return (this.getFoobar().equals("Y") ? true : false); 
} 
+0

@Column (name = "FOOBAR", columnDefinition = "CHAR")으로 시도해야합니다 public Character getFoobar() – MGorgon

답변

1

난 당신이 모두 Stringboolean 특성 (즉, getter 및 setter)에 같은 이름을 사용하기 때문에이 문제가 발생 생각합니다.

또는 boolean 속성에 @Type(type = "yes_no")으로 주석을 추가하기 만하면이 변환을 자동으로 처리하는 기본 제공 유형을 사용할 수 있습니다.

관련 문제