使用Join表创建单向OneToMany关系

时间:2012-09-28 06:07:10

标签: playframework-2.0 one-to-many ebean

我有一个用户表和兴趣表,兴趣表中的行数是finiate,我正在尝试模拟senario,每个用户都有一组兴趣,这是我的代码:

@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关系WITH join表?

感谢和问候

2 个答案:

答案 0 :(得分:5)

这是正确的行为,@OneToMany模型中的User关系可以在@ManyToOne模型中读作Interest,字面意思是“每个兴趣可能只属于一个user',所以如果Interest包含带有用户ID的字段 - 在这种情况下为user_id,那就足够了。

连接表用于存储MM关系,因此要强制使用连接表,您只需要将User模型中的关系更改为@ManyToMany,这样就可以创建您想要的内容自动。当然,如果每个兴趣都可以与唯一的一个用户联系起来,那么它就没有任何意义,因为如果给定的兴趣尚未与其他人联系,那么你需要在保存时进行控制。

BTW:两个提示:

  1. 如果您的模型具有相同的名称,您不需要使用@Table(name="interest")注释,Ebean会自动创建它
  2. 如果您计划将来转移到postgress(即在Heroku上),请将用户模型的表名更改为users(或其他内容),因为user是PG中的关键字它会引起冲突。

答案 1 :(得分:0)

在撰写本文时,Ebean不支持@OneToMany和@JoinTable。

这是一个悬而未决的问题(#123 on GitHub)。