我是JPA的新手,如果这是一个非常基本的问题,请道歉。
我有一个应用程序,用户可以对产品进行投票(范围0到10),但只能投票一次。我很困惑JPA中设置的多种关系如何允许这种情况。
我有一个User对象,一个Vote对象和一个Product对象。
用户可以对产品进行投票,但只能投票一次。产品可以有很多用户的投票,但每个用户只有一个。我如何从JPA注释中设计这个?我从数据库设计中清楚地理解这一点,而不是来自JPA。
答案 0 :(得分: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注释使用户和产品(并可能投票)成为复合主键。
但即使像这样的班级也显示出被关系设计毒害的迹象,因为它本质上是一个木匠表。