2011-01-11 3 views
149

나는 최대 절전 모드가 @Column으로 주석 된 클래스 변수만을 고려한다고 생각했다. 그러나 이상하게도 변수를 추가하면 (즉, 어떤 열에도 매핑되지 않고 클래스에 필요한 변수 만), select 문에 해당 변수를 열 이름으로 포함시키고 오류를 throw하려고합니다.하이버 네이트가 매핑되지 않은 클래스 변수를 무시하도록한다.

알 수없는 열 '필드 목록'

내 클래스 'team1_.agencyName'- 참고

@Entity 
@Table(name="team") 
public class Team extends BaseObject implements Serializable { 

@Id @GeneratedValue(strategy=GenerationType.AUTO) 
private Long id; 

@Column(length=50) 
private String name; 

@Column(length=10) 
private String code; 

@Column(name = "agency_id") 
private Long agencyId; 

private String agencyName; //note: not annotated. 

} 

... 나는 많은과 다른 클래스 위의 클래스를 사용하는 많은 매핑

@ManyToMany(fetch = FetchType.EAGER) 
@JoinTable(
     name="user_team", 
     joinColumns = { @JoinColumn(name="user_id") }, 
     inverseJoinColumns = @JoinColumn(name="team_id") 
)  
public Set<Team> getTeams() { 
    return teams; 
} 

왜 이런 일이 발생합니까?!

+3

정말 죄송합니다. 내 모든 게시물을 위해 그것을 할 것입니다! 말하는 주셔서 감사합니다. – hese

+0

@ Tunaki no, 이것은 "영속성 기간 동안 필드를 무시하는 가장 빠른 JPA 방법"이라는 질문과 정확히 일치하지 않습니다. (http://stackoverflow.com/questions/1281952/jpa-fastest-way-to-ignore-a-field-during-persistence)이 티켓은 Hibernate에 관한 것이고, 다른 하나는 JPA에 관한 것입니다. 감사합니다. – Yuci

답변

320

JPA는 특별히 @Transient로 표시하지 않는 한, 클래스의 모든 속성을 사용합니다 :

@Transient 
private String agencyName; 

@Column 주석이 순전히 선택 사항이며, 당신은 자동으로 생성 된 열 이름을 무시할 수 있도록이 . 또한 length 속성이 @Column 인 경우에만 테이블 정의를 자동 생성 할 때만 사용되며 런타임에는 영향을 미치지 않습니다.

55

검색 엔진을 통해이 게시물을 찾은 사용자의 경우 잘못된 패키지 버전 @Transient을 가져 오는 것이 원인 일 수 있습니다. 다른 패키지가 아닌 javax.persistence.transient을 가져와야합니다.

+1

. 나는 그것이 콩, 또는 끈기가 있어야하는지 궁금 해서요. – Nasir

+2

감사합니다. org.springframework.data.annotation.Transient를 사용하고 있었는데 왜 작동하지 않는지 혼란스러워했습니다. – Rudy

18

개인 필드가있는 게터에 @Transient을 삽입하면 효과적입니다.

private String name; 

    @Transient 
    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 
+0

게이 터 수준에서 @Transient를 쓰는 것도 나를 위해 일했습니다. – Dish

관련 문제