2

我是Ebean世界的新手,在設置實體之間的關係時遇到一些困難。如何設置表格之間的關係Ebean/Play框架

我基本上有兩個類,UserCar

一個用戶可以有幾個(所以我想OneToMany)和車可以屬於一個用戶(所以我猜OneToOne)。

如何鏈接這兩個實體?這是我到目前爲止已經完成

用戶

@Entity 
public class User extends Model{ 
    @Id 
    @GeneratedValue 
    public int id; 
    public String name; 
    @ManyToMany(cascade=CascadeType.ALL) 
    public List<Car> car = new ArrayList<Car>(); 
} 

汽車

@Entity 
public class Car extends Model{ 
    @Id 
    @GeneratedValue 
    public int id; 
    @OneToOne(cascade = CascadeType.ALL) 
    public User user; 
} 

而且我得到以下錯誤

的PersistenceException:錯誤models.User.car找不到映射 財產[網友]在[models.Car]

有人能解釋我清楚如何使用註釋的正確方法(文檔非常差),並告訴我,爲什麼我得到這個錯誤?

+0

錯誤的映射兩個實體之間表示彼此之間的不同關係 – silentprogrammer 2015-03-02 16:22:15

回答

6

你猜錯了:)

User應該有輛@OneToMany關係,以便:

@OneToMany(mappedBy = "user", cascade=CascadeType.ALL) 
public List<Car> car = new ArrayList<Car>(); 

,而你的Car應該有一個@ManyToOne關係:

@ManyToOne(cascade = CascadeType.ALL) 
public User user; 

上照顧@OneToMany annota的mappedBy屬性重刑:你需要告訴Ebean外鍵在相關類中的位置。

+0

謝謝!你能解釋我更多的mappedBy參數嗎?這是一個隨機的名字嗎?我不明白我應該如何以及何時使用它。 – Mornor 2015-03-02 16:36:42

+1

https://docs.oracle.com/javaee/6/api/javax/persistence/OneToMany.html – davide 2015-03-02 18:13:44

+0

在這種情況下,mappedBy不是必需的,因爲它可以被推斷。 – Shanness 2015-03-04 14:30:21

1

用戶

@Entity 
public class User extends Model{ 
@Id 
@GeneratedValue 
public int id; 
public String name; 
@OneToMany(cascade=CascadeType.ALL) 
public List<Car> car = new ArrayList<Car>(); 
} 

汽車

@Entity 
public class Car extends Model{ 

@Id 
@GeneratedValue 
public int id; 
@ManyToOne(mappedBy="car")   //will give you an error 
public User user; 
} 

mappedBy這裏代表關係的所有者是雙向的關係很重要。

認爲在正常情況下,一輛汽車可以存在,而沒有擁有它的用戶意味着用戶是關係中的所有者。因此,在您的情況下,用戶是關係的所有者。 Mapped By

但上面的代碼將無法正常工作The attribute mappedBy is undefined for the annotation type ManyToOne

在這種情況下@JoinColumn進入畫面。Join Column

+0

我想最後得到的邏輯。沒有用戶的汽車不能存在,這意味着用戶是關係的所有者,對嗎? – Mornor 2015-03-02 21:36:36

+1

@Mornor你是對的。實體是一個POJO(普通的老java對象),所以你可以把它和OOP類似,就像我們用來學習的父類和子類一樣。在你的關係中你應該小心使用級聯,就像我的回答I只將級聯類型all(表示堅持,刪除等)給用戶,所以如果你刪除用戶,所有相應的汽車將被刪除,但你不想在汽車中的行爲(這完全取決於你的關係)。 – silentprogrammer 2015-03-03 05:05:31

+0

您將mappedBy寫入Car類。因此,關係的所有者是用戶(因爲沒有用戶的汽車就不能存在)。簡而言之,mappedBy必須寫在不是所有者的類中,對嗎? ManyToOne註釋未定義MappedBy。 – Mornor 2015-03-03 08:09:02