2

我有一个用户表和兴趣表,兴趣表中的行数是有限的,我正在尝试对每个用户都有一组兴趣的情景进行建模,这是我的代码:

@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 连接表?

谢谢并恭祝安康

4

2 回答 2

5

这是正确的行为,模型中@OneToMany的关系User可以像模型中一样读取,字面意思是“每个兴趣可能只属于一个用户”,所以如果包含带有用户 ID 的字段就足够了——在这种情况下。@ManyToOneInterestInterestuser_id

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

顺便说一句:两个提示:

  1. 如果您的模型具有相同的名称,您不需要使用@Table(name="interest")注解,Ebean 会自动创建它
  2. 如果您计划将来迁移到 postgress(即在 Heroku 上),请将 User 模型的表名更改为users(或其他)作为userPG 中的关键字,这将导致冲突。
于 2012-09-28T10:05:18.480 回答
0

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

这是一个未解决的问题(GitHub 上的 #123)。

于 2014-06-23T17:33:02.467 回答