2014-09-01 2 views
2

현재 Ubuntu에 Play Framework 2.2.2와 함께 새로운 Java 프로젝트를 작성 중입니다. 나는 하나의 공통 BaseEntity 클래스에서 id, created_at, deleted_at 등과 같은 공통 필드를 상속하는 다른 db-persistable 요소가 동일한 보일러 플레이트를 다시 작성하지 않아도되도록 매우 간단한 클래스 계층을 설정하려고 시도하고 있습니다.Java의 EBean - @MappedSuperclass를 사용한 상속

내가 지금하고있는 예제는 다음과 같습니다.

@Entity 
public class User extends BaseEntity { 

    @Id 
    public int id; 

    @Constraints.Required 
    public String email; 

    @Constraints.Required 
    public IUser.Status status; 

    public String activationCode; 

    public User() 
    { 
    ... 
    } 
} 

나는 새로운 속성 name을 가진 간단한 기본 클래스를 만들었습니다. 이 잘 컴파일 :

@MappedSuperclass 
public abstract class BaseEntity extends Model { 

    protected String name; 

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

    public BaseEntity() 
    { 

    } 
} 

는 이제 BaseEntity 클래스 이름 필드 또는 getset-ERS를 포함하지 않았을 때, EBean 성공적으로 DB에 법인을 절약 할 수있다. getter 및 setters 필드를 추가 한 후에 엔티티를 저장할 때 Play가 다음 예외로 인해 충돌했습니다.

java.lang.NoSuchMethodError : models.User._ebean_getni_name() Ljava/lang/String; models.User._ebean_getField (User.java:1) com.avaje.ebeaninternal.server.reflect.EnhanceBeanReflect $ Getter.get (EnhanceBeanReflect.java:162)에서 에서 .....

getset 제거 -ers 또는 기본 클래스로 이동하면 동일한 예외가 발생합니다. 나는 내가 뭘 잘못하고 있는지 보여주는 예제를 꽤 지칠 줄 모르고 온라인으로 보았지만 그것을 고치는 것을 발견하지 못했다. 나는 그것이 꽤 간단하다고 확신한다. 누구든지 도와 줄 수 있습니까?

감사합니다.

답변

2

나를 위해 작동합니다. 나는 게터 나 세터를 사용하지 않고있다. 저는 Play 2.2에서 그것을 개발했고 2.3으로 실행 시켰습니다. 나는 대부분의 필드를 명확하게하기 위해 제거했다. 이름 필드가 보호 된 것으로 표시 되었기 때문일 수 있습니다.

@MappedSuperclass 
public abstract class Member extends Model { 

    @Id 
    public Long id; 
    public String businessName; 
    public String webAddress; 
.. 
} 

@Entity 
public class Supplier extends Member { 

    public int minimumNoticeInHours; 
    public int maximumNoticeInDays; 
.. 
} 
+0

감사합니다. 문제가있는 컴파일과 관련 될 수 있다고 생각합니다. 수동으로 누락 된 속성을 수동으로 추가했을 때와 같은 문제가 발생할 수 있습니다. _ebean_getni_name 잘 컴파일되었습니다. 나는 이것들이 어떤 이유 때문에 기본 클래스를 위해 적절하게 생성되지 않는 자동 생성 된 속성들이라고 생각한다. 접근 수정자는 아무런 차이를 만들지 않았다. 당분간보다 간단하고 덜 문제가있는 ORM으로 이동했습니다! – mistakenot