현재 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 또는 기본 클래스로 이동하면 동일한 예외가 발생합니다. 나는 내가 뭘 잘못하고 있는지 보여주는 예제를 꽤 지칠 줄 모르고 온라인으로 보았지만 그것을 고치는 것을 발견하지 못했다. 나는 그것이 꽤 간단하다고 확신한다. 누구든지 도와 줄 수 있습니까?
감사합니다.
감사합니다. 문제가있는 컴파일과 관련 될 수 있다고 생각합니다. 수동으로 누락 된 속성을 수동으로 추가했을 때와 같은 문제가 발생할 수 있습니다. _ebean_getni_name 잘 컴파일되었습니다. 나는 이것들이 어떤 이유 때문에 기본 클래스를 위해 적절하게 생성되지 않는 자동 생성 된 속성들이라고 생각한다. 접근 수정자는 아무런 차이를 만들지 않았다. 당분간보다 간단하고 덜 문제가있는 ORM으로 이동했습니다! – mistakenot