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中选择两个日期之间的所有数据