2011-03-02 8 views
15

만듭니다.봄 루, 최대 절전 모드, 많은 관계로 하나는 내가 MVC, 루 봄 및 최대 절전 모드로 새로 온 추가 테이블

1 : M 관계로 두 개의 테이블을 만들려고합니다.

예 : Person과 Car의 두 엔티티가 필요합니다. 한 사람은 많은 자동차를 소유 할 수 있습니다. 루

entity --class ~.domain.Person 
field string Name 
entity --class ~.domain.Car 
field string Name 
field reference --fieldName owner --type ~.domain.Person 
field set --fieldName ownedCars --type ~.domain.Car --class ~.domain.Person --cardinality ONE_TO_MANY 
자동차

생성 된 클래스 사용

제작 한 개체 :

@RooJavaBean 
@RooToString 
@RooEntity 
public class Person { 

    private String Name; 

    @OneToMany(cascade = CascadeType.ALL) 
    private Set<Car> ownedCars = new HashSet<Car>(); 
} 

그러나 사람에 대한

@RooJavaBean 
@RooToString 
@RooEntity 
public class Car { 

    private String Name; 

    @ManyToOne 
    private Person owner; 
} 

생성 된 클래스를 데이터베이스에, 3가 테이블 (2 중 insted)

(예상) 91,363,210

표 CAR (예상)

CREATE TABLE "TEST"."CAR" 
    ( 
    "ID" NUMBER(19,0), 
    "NAME" VARCHAR2(255 BYTE), 
    "VERSION" NUMBER(10,0), 
    "OWNER" NUMBER(19,0) 
    ) 

표 PERSON

CREATE TABLE "TEST"."PERSON" 
    (
"ID" NUMBER(19,0), 
    "NAME" VARCHAR2(255 BYTE), 
    "VERSION" NUMBER(10,0) 
    ) 

또한 PERSON_OWNED_CARS

CREATE TABLE "TEST"."PERSON_OWNED_CARS" 
    (
"PERSON" NUMBER(19,0), 
    "OWNED_CARS" NUMBER(19,0) 
    ) 
(예상되지 않는, 그것은 많은 관계 많은 아니다)

마지막 테이블이 생성되는 이유는 무엇입니까? 마지막 테이블의 목적은 무엇입니까, 그것은 많은 관계가 많지 않습니다? 그것을 피할 수 있습니까? 내가 뭔가 잘못하고 있는거야?

답변

20

나는 루이를 관리하는 방법을 잘 모르겠어요,하지만 당신은 mappedBy과 양방향 관계의 측면을 연결해야합니다

@OneToMany(cascade = CascadeType.ALL, mappedBy = "owner") 
private Set<Car> ownedCars = new HashSet<Car>(); 
그렇지 않으면 그들은 두 개의 서로 다른 단방향 관계로 해석됩니다

Person에서 Car 관계입니다 조인 테이블을 통해 구현됩니다 (단방향 일대 다 관계의 기본 동작).

+1

우수 답변! 고맙습니다! – Emir

+5

Roo 자체에서 수행하기 위해'--mappedBy owner' 옵션을 사용할 수 있습니다. 질문과 답변에 감사드립니다. – xverges

+0

대단히 유용한 답변으로, 테이블 생성 동작에 관해서 여기 정말 분실했습니다. –

관련 문제