itsource

매핑되지 않은 클래스 변수를 최대 절전 모드로 무시

mycopycode 2022. 8. 30. 22:28
반응형

매핑되지 않은 클래스 변수를 최대 절전 모드로 무시

나는 hibernate가 주석으로 표시된 클래스 변수만 고려한다고 생각했다.@Column그런데 이상하게도 오늘 변수를 추가했을 때(어느 열에도 매핑되지 않고 클래스에 필요한 변수만) 해당 변수를 select 문에 열 이름으로 포함하려고 하고 오류를 발생시킵니다.

'필드 리스트'의 알 수 없는 열 '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;
}

왜 이런 일이 일어나는 거죠?

JPA는 특별히 마킹하지 않는 한 클래스의 모든 속성을 사용합니다.@Transient:

@Transient
private String agencyName;

@Column주석은 순전히 옵션이며 자동 생성된 열 이름을 재정의할 수 있습니다.또,length의 특성@Column테이블 정의를 자동 생성할 때만 사용되며 런타임에는 영향을 주지 않습니다.

검색 엔진을 통해 이 게시물을 발견한 사람들에게 이 문제의 또 다른 가능한 원인은 잘못된 패키지 버전을 가져오는 것입니다.@Transient. 반드시 Import 합니다.javax.persistence.transient다른 패키지는 안 돼요

배치@Transient개인 밭에서 일하는 게터였어요

private String name;

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

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

언급URL : https://stackoverflow.com/questions/4662582/make-hibernate-ignore-class-variables-that-are-not-mapped

반응형