2013-08-24 5 views
1

나는 Ebean에서 상속을 사용하려고 시도합니다! 프레임 워크 2.1.0. 상속 전략은 Ebean에서 지원하는 유일한 테이블이기 때문에 "단일 테이블"입니다. 나는 밀접하게 JPA WikibookEbean 상속 "readMethod가없는 추상 클래스"예외

@Entity 
@Inheritance 
@DiscriminatorColumn(name="price_type") 
@Table(name="prices") 
public abstract class Price { 

    @Id 
    public long id; 

    // Price value 
    @Column(precision=2, scale=18) 
    public BigDecimal value; 

} 


@Entity 
@DiscriminatorValue("F") 
public class FixedPrice extends Price { 

    // NO id field here   
    ... 
} 

@Entity 
@DiscriminatorValue("V") 
public class VariablePrice extends Price { 

    // NO id field here 
    ... 
} 

이 코드는 컴파일 통과에서 예를 따라,하지만 난

RuntimeException: Abstract class with no readMethod for models.Price.id 
com.avaje.ebeaninternal.server.deploy.ReflectGetter.create(ReflectGetter.java:33) 

com.avaje.ebeaninternal.server.deploy.BeanDescriptorManager.setBeanReflect(BeanDescriptorManager.java:1353) 

com.avaje.ebeaninternal.server.deploy.BeanDescriptorManager.createByteCode(BeanDescriptorManager.java:1142) 

com.avaje.ebeaninternal.server.deploy.BeanDescriptorManager.readDeployAssociations(BeanDescriptorManager.java:1058) 

com.avaje.ebeaninternal.server.deploy.BeanDescriptorManager.readEntityDeploymentAssociations(BeanDescriptorManager.java:565) 

com.avaje.ebeaninternal.server.deploy.BeanDescriptorManager.deploy(BeanDescriptorManager.java:252) 

com.avaje.ebeaninternal.server.core.InternalConfiguration.<init>(InternalConfiguration.java:124) 
    com.avaje.ebeaninternal.server.core.DefaultServerFactory.createServer(DefaultServerFactory.java:210) 

com.avaje.ebeaninternal.server.core.DefaultServerFactory.createServer(DefaultServerFactory.java:64) 

com.avaje.ebean.EbeanServerFactory.create(EbeanServerFactory.java:59) 

play.db.ebean.EbeanPlugin.onStart(EbeanPlugin.java:79) 

Google 검색이 ReflectGetter.java의 소스 코드 only one relevant link을 제공받을. 거기에 코멘트가 있습니다

id 속성을 보유하고있는 추상 클래스의 경우, 리플렉션을 사용하여 id 값을 얻는 것이 필요합니다.

이렇게하면 BeanReflectGetter 개체가 제공됩니다.

슈퍼 클래스 선언에서 abstract 키워드를 삭제하면 예외가 사라집니다. 나는 정말로 수퍼 클래스를 콘크리트로 만들지 않는 것을 선호 할 것이다.

답변

4

id 필드에 getter/setter를 추가하면 사라집니다.

+0

나는 그것을 생각해야만합니다. 감사! – stys