2013-11-25 2 views
0

@Entity로 주석 된 클래스가 있으므로 데이터베이스에 저장됩니다. 이제 어떻게 내가 원하는 그것을 확장이지만, 자식 클래스는 전혀 지속되어서는 안된다 :엔티티에 @Transient 주석 달기

@Entity(name = "A") 
public abstract class A { 

    private String field; 

    public String getField() { 
     return field; 
    } 

    public abstract void print(); 
} 

public class B extends A { 

    @Override 
    public void print() { 
     System.out.println(getField()); 
    } 
} 

이유는 데이터베이스에 추가 불필요한 항목을 작성 방지하기 위해 @Transient와 B에 주석을 달 수없는 이유는 무엇입니까? 나는 중요한 것을 놓칠까요?

+0

@Transient는 JAX-B 주석으로 XML과주고받는 필드를 제어하는 ​​데 사용되며 JPA와는 아무런 관련이 없으므로 효과가 없습니다. – Pace

+0

@Pace'@ Transient'는 JPA 주석 (패키지 지속성에도 있음)이며 영속성이없는 필드에 사용됩니다. http://docs.oracle.com/javaee/5/api/javax/persistence/ Transient.html –

+0

정확합니다. 나는 그것을 완전히 뒤로 향했다. 죄송합니다. – Pace

답변

1

, 당신은 간단하지 않습니다 (지속되지 않습니다 필드/속성을 표시에 사용되는) @Transient로 주석 아니라 @Entity로 주석을 피하거나 할 필요가 없습니다 B의 인스턴스가 지속 얻을 것을 방지하기 위해 list가 persistence.xml 파일에 있습니다.

이외에도 코드에서 이러한 형식을 유지하려고 시도하지 않아야하며, 그렇지 않으면 예외가 throw됩니다.

+0

단지 설명을 위해 : 만약 내가 B를 인스턴스화하고 데이터를 지속한다면, 데이터베이스에 저장되지 않을 것입니다. (만약 차이가 있다면 Hibernate를 사용하고 있습니다)? – hoefling

+0

아니요, @Entity로 주석을 달지 않았기 때문에 지속되지 않습니다. 그러나 코드가이를 유지하려고 시도하면 (예외적으로) 예외가 발생합니다. –

+0

그것을 얻었습니다! 설명에 많은 감사드립니다! – hoefling