我有一个用户表和兴趣表,兴趣表中的行数是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表?
感谢和问候
答案 0 :(得分:5)
这是正确的行为,@OneToMany
模型中的User
关系可以在@ManyToOne
模型中读作Interest
,字面意思是“每个兴趣可能只属于一个user',所以如果Interest
包含带有用户ID的字段 - 在这种情况下为user_id
,那就足够了。
连接表用于存储MM关系,因此要强制使用连接表,您只需要将User
模型中的关系更改为@ManyToMany
,这样就可以创建您想要的内容自动。当然,如果每个兴趣都可以与唯一的一个用户联系起来,那么它就没有任何意义,因为如果给定的兴趣尚未与其他人联系,那么你需要在保存时进行控制。
BTW:两个提示:
@Table(name="interest")
注释,Ebean会自动创建它users
(或其他内容),因为user
是PG中的关键字它会引起冲突。答案 1 :(得分:0)
在撰写本文时,Ebean不支持@OneToMany和@JoinTable。
这是一个悬而未决的问题(#123 on GitHub)。