2011-03-02 32 views
15

Bahar mvc, roo ve hazırda bekletme konusunda yeniyim.Spring Roo, Hazırda Beklet, Bire çok ilişki ek tablo oluşturur

1: M ilişkisiyle iki tablo oluşturmaya çalışıyorum.

Örneğin, İki kişi, Kişi ve Araba istiyorum. Bir kişi çok arabaya sahip olabilir. Roo

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 
araba için

Oluşturulan sınıf kullanılarak

oluşturduğum kişiler:

@RooJavaBean 
@RooToString 
@RooEntity 
public class Person { 

    private String Name; 

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

Ancak kişi için

@RooJavaBean 
@RooToString 
@RooEntity 
public class Car { 

    private String Name; 

    @ManyToOne 
    private Person owner; 
} 

Oluşturulan sınıf, veritabanında, 3 vardır tablolar (iki adet)

(Beklendiği gibi)

Tablo CAR (beklendiği gibi)

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

Tablo KİŞİ

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

ve ayrıca PERSON_OWNED_CARS

CREATE TABLE "TEST"."PERSON_OWNED_CARS" 
    (
"PERSON" NUMBER(19,0), 
    "OWNED_CARS" NUMBER(19,0) 
    ) 
(beklenmemektedir hangi, birçok ilişki için pek değil)

Son tablo neden oluşturuldu? Son tablonun amacı nedir, pek çok ilişki değil? Önlenebilir mi? Yanlış bir şey mi yapıyorum?

cevap

20

Ben Roo bu yönetir emin değilim ama mappedBy ile iki yönlü ilişkilerin yanlarını bağlamanız gerekir:

@OneToMany(cascade = CascadeType.ALL, mappedBy = "owner") 
private Set<Car> ownedCars = new HashSet<Car>(); 
Aksi takdirde, iki farklı tek yönlü ilişkiler olarak yorumlanır

ve Person den Car ilişkiyi olduğunu birleştirme tablosu aracılığıyla uygulanır (tek yönlü çoktan bir ilişki için varsayılan bir davranıştır).

+1

Mükemmel cevap! Teşekkür ederim! – Emir

+5

Roo'dan bunu yapmak için '--mappedBy owner'option kullanılabilir. Soru ve cevap için teşekkürler! – xverges

+0

Oldukça yararlı bir cevap, burada tablo üretimi davranışı hakkında gerçekten kayboldum. –

İlgili konular