엔 티 티 클래스 에 대한 JPA (HIBERNATE) 의 의문

2077 단어 Hibernatejpa
최근 에 JPA 를 공부 하면 서 저 는 HIBERNATE 3 의 실현 을 사 용 했 습 니 다. ENTITY 를 작성 할 때 한 가지 문 제 를 발 견 했 습 니 다. 하 얀 것 일 수도 있 지만 여기 서 여러분 과 공유 하 겠 습 니 다.
@ Column 표 시 를 쓸 때 JPA 는 두 가지 방법 이 있 습 니 다. 하 나 는 해당 하 는 속성 에 표시 하 는 것 이 고, 다른 하 나 는 해당 하 는 속성 에 표시 하 는 get 방법 입 니 다.현재 ENTITY 에 영구적 으로 사용 하지 않 으 려 는 속성 이 있다 면 @ Transient 표 시 를 표시 하여 이 속성 이 영구적 으로 사용 되 지 않 음 을 표시 해 야 합 니 다.그러나 구체 적 으로 사용 할 때 저 는 문제 하 나 를 발 견 했 습 니 다. 그것 은 현재 ENTITY 에 getXXX 방법 이 있 지만 해당 하 는 속성 이 없 으 면 구체 적 인 merge 나 persist 방법 을 실행 할 때 프로그램 이 잘못 될 수 있 습 니 다.따라서 getXXX 방법 이 있 고 해당 하 는 속성 이 없 을 경우 이 방법 에 @ Transient 표 시 를 표시 해 야 합 니 다.
예 는 다음 과 같다.


@Entity
@Table(name="xxx")
public class NewClass implements Serializable{

    private Integer id;

    private String name;

    private String abc;

    @Id
    @Column(name="id")
    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    @Column(name="name")
    public String getName() {
        return name;
    }

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

    // abc       ,    Transient
    @Transient
    public String getAbc() {
        return abc;
    }

    public void setAbc(String abc) {
        this.abc = abc;
    }

    //   ,             ,     Transient  ,hibernate jpa   
    //         newName   ,          ,        ,   
    // org.hibernate.PropertyNotFoundException: Could not find a setter for property newName in class com.egf.entity.NewClass
    @Transient
    public String getNewName(){
        return name+abc;
    }
}

getNewName 방법 에 대해 get 으로 시작 하지 않 으 면 프로그램 이 순조롭게 통과 할 수 있 습 니 다. 그렇지 않 으 면 @ Transient 로 표시 해 야 합 니 다.
다시 한 번 말씀 드 리 지만 이 문 제 는 제 가 hibenate JPA 에서 발 견 했 습 니 다. 다른 JPA 실현 에 똑 같은 문제 가 있 는 지 테스트 가 필요 합 니 다.

좋은 웹페이지 즐겨찾기