代码之家  ›  专栏  ›  技术社区  ›  Codemwnci

JPA多约束

  •  2
  • Codemwnci  · 技术社区  · 14 年前

    我是新来的JPA,所以如果这是一个非常基本的问题道歉。

    我有一个应用程序,用户可以投票一个产品(范围从0到10),但只能投票一次。我很困惑在JPA中建立的一个多人的关系会允许这样做。

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

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

    1 回复  |  直到 14 年前
        1
  •  1
  •   Tom Neyland    14 年前

    因为您使用的是JPA,它是一个对象关系映射器,所以如果不涉及JPA和数据库,请按照您的方式进行设计。

    我的意思是构建对象模型(java类)的方式应该对您试图捕获的对象和关系有意义——然后担心如何围绕这些对象正确配置JPA。

    上一次我使用JPA是在2.0推出的时候,所以我不记得规范是如何完全支持使用java.util.map实现的字段的,但是如果有支持的话,映射将是一个很好的方法。

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

    Map<User,Vote> votesOnThisProduct;
    

    但老实说,只要从java类的角度考虑,忽略JPA和数据库的思维方式,就可以找到最合理的方法。

    其他选项是定义其他类,例如

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

    然后通过JPA注释使用户和产品(可能还有投票)成为复合主键。

    但即使是这样的类也有被关系设计毒害的迹象,因为它本质上是一个joiner表。