2012-01-12 2 views
0

내 라이브 데이터베이스의 내용에서 yml을 생성하려면 내 Play 앱과 함께 logisimayml 1.5 모듈을 사용하고 있습니다. 모듈은 JPA 클래스를 탐색하여 yml에 무엇이 쓰여지는지 결정하기 위해 자식을 식별합니다. YML 이제Play Framework와 함께 logisimayml 모듈 사용

Parent(Parent_1): 
name: Bill 
children: 
- Child_1 

Parent(Parent_2): 
name: Bill 

Child(Child_3): 
name: Jill 

Child(Child_1): 
name: Jill 
parent: Parent_1 

: 나는 logisimayml을 실행하면

public class Parent extends Model { 

    @OneToMany(mappedBy = "parent", targetEntity = Child.class) 
    public List<Child> children; 

    ... 
} 

public class Child extends Model { 

    @ManyToOne 
    @JoinColumn(name = "parent_id") 
    public Parent parent; 

    ... 
} 

, 그것은이처럼 보이는 data.yml 파일을 생성합니다 :

은이 같은 두 가지 간단한 JPA 클래스를했다 그래서 경우 위의 JPA 클래스를 나타냅니다 그러나 내 응용 프로그램에로드하는 데 사용 data.yml 파일을 사용하고 싶습니다.

Fixtures.loadModels("data.yml"); 

빌이 처음이고 아이 질을 찾고 싶어하기 때문에 이것은 잘 작동하지 않습니다. Jill은 아직 선언되지 않았으므로 넘어집니다. 이는 부모님과 @ManyToOne 모두에서 @OneToMany를 사용했음을 의미합니다. 이는 양방향성을 의미합니다. @OneToMany를 제거 할 수는 있지만 여전히 내 코드를 위해 필요합니다. 누구든지 JPA 클래스를 그대로 유지하기 위해 할 수있는 일을 알고 있지만 부모와 자식 간의 무한 루프없이 yml 렌더링을 할 수 있습니까?

업데이트 : 여기에 내가 logisimayml에 의해 생성 된 data.yml을 가리키는 내 재생 응용 프로그램을 시작할 때 볼 수있는 예외 :

RuntimeException occured : Cannot load fixture data.yml: No previous reference found for object of type sites with key User_25 

아이로 data.yml 참조 User_25의 첫 번째 목적 . User_25 선언은 내 data.yml에서 훨씬 더 아래쪽에 있습니다. Luffy가 아래에서 언급했듯이, 간단한 Parent-Child 예제는 실제로 예외가 발생하지는 않습니다. 내 실제 프로젝트에는 상당히 큰 데이터베이스가 있으므로 간단한 예제에서 복제하기가 어렵습니다. 양방향 주석과 관련이 있다고 생각했지만 나중에는 그렇지 않습니다. 또한 위의 예제에서 data.yml을 업데이트했습니다. 나는 실제로 Luffy가 한 일을하고 간단한 Parent-Child 예제로 실제 프로젝트를 만들었고 모듈을 실행 한 후에 실제로 내 손으로 만든 yml과 약간 다른 것을 만들었습니다. Fixtures.loadModels (..) 호출에서 해당 yml을 사용하면 실제로 작동하지만 실제로 프로덕션에서 볼 때 문제를 정확히 반영하지는 않으므로 다시 알려야합니다.

답변

0

ManyToOne 주석에서 "fetch = FetchType.LAZY"를 사용해보세요. 이렇게하면 문제를 해결하는 데 도움이 될 수 있습니다.

@ManyToOne(name = "parent_id", fetch = FetchType.LAZY) 
+0

실제 코드에는 fetch type이 있습니다. 나는 OP에서의 나의 예에서 그것을 포함하지 않았다. – digiarnie

+0

새 놀이 프로젝트에서 당신의 senario를 테스트하는 것은 이상한 일입니다. 그 간단한 예제 yml 성공적으로 boostrapup에. 나는 db와 bill을 모두 db에 체크인했다. 나는 1.2.4를 사용하고있다. 그리고 나는 수동으로 yml 파일을 만든다. 테스트를 위해 postgresql을 사용했습니다. – Luffy

+0

네 말이 맞아. OP에 넣은 간단한 예가 실제로 작동합니다. 큰 yml을 사용하는 대형 앱은 여전히 ​​작동하지 않습니다. 나는 내가 본 문제를 실제로 모방하는 모범으로 돌아 가야 할 것이다. 내 간단한 간단한 예에서 그 문제를 찾아 주셔서 감사합니다! – digiarnie

관련 문제