2012-09-28 64 views
2

我有一個用戶表和興趣表,興趣表中的行數是finiate,我試圖模擬senario,每個用戶有一組興趣這是我的代碼:與Join表創建單向OneToMany關係

@Entity 
@Table(name="user") 
public class User extends Model{ 
@OneToMany(cascade = CascadeType.PERSIST) 
@JoinTable(name="user_interest") 
public List<Interest> interests; 
} 


@Entity 
@Table(name="interest") 
public class Interest extends Model{ 
@Id 
public Long id; 
public String name; 
public String image; 
} 

當然,我想有共同的表,但演變忽略創建連接表,並試圖通過在興趣表添加額外的列去做。這是

create table interest (
19 id      bigint auto_increment not null, 
20 user_id     bigint not null, 
21 name      varchar(255), 
22 image      varchar(255), 
23 constraint pk_interest primary key (id)) 
. 

我在做什麼錯?我如何使用ebean在play2.2中創建一個簡單的OneToMany關係與連接表?

感謝和問候

回答

5

這是正確的行爲,在User模型@OneToMany關係可以在Interest模型,它的字面意思是「每個興趣可能只屬於一個用戶,所以它是不夠的,如果好讀作@ManyToOne在這種情況下,Interest包含帶有用戶標識的字段 - user_id

連接表用於存儲MM關係,所以要強制使用連接表,您只需將User型號中的關係更改爲@ManyToMany,以便它自動創建您想要的結果。當然,如果每個興趣都可以與唯一的一個用戶連接,那麼它就沒有任何意義,因爲如果給定的興趣尚未加入其他人,則需要在保存時進行控制。

BTW:兩個小技巧:

  1. 你不需要使用@Table(name="interest")註釋如果你的模型具有相同的名稱,Ebean會自動創建
  2. 如果您計劃遷移到postgress在未來(即在Heroku上)將用戶模型的表名更改爲users(或其他),因爲user是PG中的關鍵字,它會導致衝突。
0

在撰寫本文時,Ebean不支持@OneToMany和@JoinTable。

這是一個公開問題(#123 on GitHub)。