【问题标题】:Creating a unidirectional OneToMany relationship with Join table使用 Join 表创建单向 OneToMany 关系
【发布时间】:2012-09-28 06:07:10
【问题描述】:

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

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

感谢和问候

【问题讨论】:

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


    【解决方案1】:

    这是正确的行为,User 模型中的@OneToMany 关系在Interest 模型中可以读作@ManyToOne,字面意思是“每个兴趣可能只属于一个用户”,所以如果Interest 包含带有用户 ID 的字段 - 在本例中为 user_id

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

    顺便说一句:两个提示:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2015-03-15
        • 2013-11-20
        • 2021-08-27
        • 2018-04-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多