2010-11-19 160 views
2

我是JPA的新手,非常抱歉,如果这是一个非常基本的问题。JPA ManyToMany约束

我有一个应用程序,用户可以对产品进行投票(范围为0到10),但只能投一次。我很困惑JPA建立的许多多元关系如何允许这样做。

我有一个用户对象和一个投票对象和一个产品对象。

用户可以对产品进行投票,但只能投一次。一个产品可以有许多用户的投票,但每个用户只有一个投票。我如何从JPA注释中设计这个?我清楚地从数据库设计中明白这一点,而不是来自JPA。

回答

1

由于您使用的是JPA,它是一个对象关系映射器,因此可以像JPA和数据库不参与那样进行设计。

我的意思是建立你的对象模型(Java类)的方式,将有意义的对象和关系,你试图捕捉 - 然后担心正确配置这些对象的JPA。

我最后一次使用JPA时,2.0版本正在推出,所以我不记得规范是如何支持使用java.util.map实现的字段,但Map将是一个支持的好方法。

具体来说,在您的Product对象中,可以有一个Map类型的字段。

Map<User,Vote> votesOnThisProduct; 

但说实话,无论感觉最合理的,当你只从Java类,忽略JPA和数据库心态的角度想想,是要走的路。

其他选项。将定义其它类,如

public class ProductVoteRecord 
{ 
    User user; 
    Vote vote; 
    Product product; 
} 

,然后使用户和产品(以及可能投票)经由JPA注释的化合物主键。

但即使是这样的一类,也会显示被关系设计中毒的迹象,因为它本质上是一个细分表。