使用Join表创建单向OneToMany关系

nig*_*aph 2 one-to-many ebean playframework-2.0

我有一个用户表和兴趣表,兴趣表中的行数是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;
}
Run Code Online (Sandbox Code Playgroud)

我自然希望有联合表但是进化忽略了创建连接表并尝试通过在兴趣表中添加额外的列来实现.这是

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))
.
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么??如何使用ebean在play2.2中创建一个简单的OneToMany关系WITH join表?

感谢致敬

bie*_*ior 5

这是正确的行为,模型中的@OneToMany关系User可以像@ManyToOneInterest模型中一样阅读,字面意思是"每个兴趣可能只属于一个用户",所以如果Interest包含具有用户ID的字段就足够了 - user_id在这种情况下.

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

BTW:两个提示:

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