2012-12-25 2 views
4

방금 ​​Play Framework를 사용하기 시작했습니다. 자습서 (기본 기능 다루기)를 마친 후에는 데이터베이스와 게임 사이의 설정 연결을 시도합니다. , 문제가 어디 있는지 모르는ebean의 복합 키 및 프레임 워크를 재생

PersistenceException: Could not find BeanDescriptor for class models.CatPath$KatPathKey. Perhaps the EmbeddedId class is not registered? 

: 나는 예외가 컴파일 후

@Entity 
public class CatPath extends Model { 

@EmbeddedId 
public CatPathKey key; 
public Long depth; 

public class CatPathKey { 

     public Long parentC; 
     public Long childC; 
} 

public static Finder<CatPathKey, CatPath> find = new Finder<CatPathKey, CatPath>(CatPathKey.class, CatPath.class); 

:

CREATE TABLE IF NOT EXISTS `shop`.`CatPath` (
    `parentC` INT NOT NULL , 
    `childC` INT NOT NULL , 
    `depth` INT NOT NULL , 
    PRIMARY KEY (`parentC`, `childC`) 
) 

그래서 난 모델의 클래스를 내장 : 내 관계 중 하나는 스키마가 내가 튜토리얼을 따라 갔을 때 모든 것이 효과가있었습니다. 내 코드와 튜토리얼의 차이점은 키이다 : 나는 복합 키를 가지고있다. 튜토리얼에서는 단지 하나의 컬럼 만이 키를 만든다. 튜토리얼에서 '등록 클래스'가 필요하지 않은 이유는 무엇입니까? 자동으로 등록되었지만 복합 키가있는 이유는 무엇입니까?

일부 정보를 찾으려고했는데 발견했습니다. http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Entities/Ids/EmbeddedId 이 xml 코드는 '클래스 등록'입니까? Play 프레임 워크 자습서 및 xml에 대한 세부 주제는 언급되지 않았지만 모델의 클래스에는 아무런 변화가 없었습니다.

답변

6

당신은 당신의 CatPathKey 클래스 아래 @Embeddable 주석을 추가 할 수 있습니다

@Embeddable 
public class CatPathKey { 

     public Long parentC; 
     public Long childC; 
} 
+0

덕분에, 지금은 완벽하게 작동합니다. 왜 내가 하나의 기본 키로 예외를 얻지 않았는지 설명해 주시겠습니까? –

+0

'@ Embeddable' 어노테이션은 클래스를 등록하기 위해 ebean에서 사용됩니다. 하나의 기본 키를 사용한다면 containaing 클래스가'@ Entity' 주석을 사용하여 등록 되었기 때문에 작동합니다. –

+0

Embeddable 클래스에 두 개의 ManyToOne 필드를 포함 할 수 있습니까? 다른 두 항목을 참조하는 고유 한 DB 항목 만 있는지 확인하려면 복합 키가 필요합니다. – cosmolev

관련 문제