我有一个典型的例子,一个POST有很多标签,而一个TAG有很多POST。 而不是使用一个典型@ManyToMany
,我使用中间域对象,称为TAGPOST,这也让我有在里面有用的数据,当一个岗位被标记与给定的标签,等每个岗位,并TAG如resp,与TAGPOST的关系是@OneToMany
。将一对@ManyToOne相关属性标记为唯一。可能?
的具体要求是,后不能有包含了两次,因此TAGPOST.post和TAGPOST.tag对必须始终唯一相同的标签。通常情况下,我会通过在表中创建一个组合主键对来实现这一点,负责存储TAGPOST对象。
据我所知,没有任何方式来表达这种独特的约束。我标记为jpa.ddl=update
,这意味着每次将应用程序移至新环境时,我都必须手动修复此数据库。这非常不方便,而且容易出错,特别是在单元测试时,因为那样在每次迭代中创建和删除数据库的次数都会增加或减少。
我甚至在想手工做@PrePersist
检查,甚至在业务层移动的检查,比如,创建一个PostService。
我该怎么办?我是否缺少Play默认的内容?一些巧妙的注释来表达TAGPOST类的@ManyToOne
属性的唯一性?
FYI:我使用的播放1.2.5
编辑:TAGPOST类看起来是这样的:
@Entity
public class TagPost extends Model {
@ManyToOne
public Tag tag;
@ManyToOne
public Post post;
public Date dateAdded;
...
}
我认为你可以有你'TagPost'对象的复合ID。你能分享'TagPost'类的代码吗? – dcernahoschi 2013-03-22 09:34:47
@dcernahoschi刚刚发布了它 – preslavrachev 2013-03-22 10:21:47