PlayFramework中模型之间的“双重”多对多关系

Posted

技术标签:

【中文标题】PlayFramework中模型之间的“双重”多对多关系【英文标题】:"Double" ManyToMany relationship between models in PlayFramework 【发布时间】:2013-06-19 12:02:55 【问题描述】:

我是这个论坛的新手,也是 Play Framework 的新手。我正在做文凭工作,但我有一个小问题,关于 Play 模型,它被映射到 mysql 模式实体中。

基本上,我有“公告”和“技术”实体(模型),我想在它们之间建立“双重”多对多关系。更具体地说,我想要“RequiredTecnologies”和“Good-To-KnowTechnologies”交叉表。有没有办法“拆分”这两个表?这是生成一个 ManyToMany 表的代码,其中重复列“id”引用了公告。

// ENTITY ANNOUNCE
...
@Entity
public class Announce extends Model 

    ...
    @JoinColumn(nullable=true)
    @ManyToMany
    public List<Technology> reqTechno;

    @JoinColumn(nullable=true)
    @ManyToMany
    public List<Tehnologija> gtkTechno;
    ...


// ENTITY TECHNOLOGY
...
@Entity
public class Technology extends Model 

    ...
@ManyToMany(mappedBy = "reqTechno")
public List<Announce> annRT;

@ManyToMany(mappedBy = "gtkTechno")
public List<Announce> annGT;
    ...

这段代码在 MySQL 中生成表的方式如下:

annRT_id  reqTechno_id  annGT_id  gtkTechno_id
______________________________________________
       1             2         1             7
       1             3         1             9
    null          null         1            10
       2             4         2             7

我想要的结果是:

    annRT_id  reqTechno_id       annGT_id  gtkTechno_id
__________________________       ______________________
       1             2                  1             7
       1             3                  1             9
       2             4                  1            10
                                        2             7

在此先感谢,感谢您的帮助!

附:我使用的 Play 版本是 v. 1.2.5。

【问题讨论】:

你试过用@JoinColumn(nullable=false) :D 【参考方案1】:

使用@JoinTable 为每个表指定不同的表名。 比如:

@ManyToMany(...)
@JoinTable(name="Announce_reqTechno")
public List<Technology> reqTechno;


@ManyToMany(...)
@JoinTable(name="Announce_gtkTechno")
public List<Technology> gtkTechno;

【讨论】:

以上是关于PlayFramework中模型之间的“双重”多对多关系的主要内容,如果未能解决你的问题,请参考以下文章

playframework - 多对多,使用 crud 模块有额外的列

与 Play Framework 1.2.5 JPA 的多对多关系

Postgresql:在playframework 1.x中选择两个日期之间的所有数据

Laravel 5.1 中 3 个模型之间的关系(“像多对多通过”)

如何首先在 EF 代码中建立模型和枚举之间的多对多关系?

Laravel Eloquent 三个模型之间的多对多关系