Hibernate在@JoinTable上创建关系

时间:2014-07-02 02:44:17

标签: java hibernate java-ee jpa hibernate-mapping

我有两个具有多对多关系的表,它们具有如下所示的JoinTable USER_SERVICES。

@Entity
public class User implements Serializable {

    @NotNull
    @Column(unique=true)
    private String username;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id")
    private Long id;

    @ManyToMany(fetch = FetchType.EAGER)
    @JoinTable(
            name = "USER_SERVICES",
            joinColumns = {@JoinColumn(name = "id", referencedColumnName = "id")},
            inverseJoinColumns = {@JoinColumn(name = "", referencedColumnName = "name")})
    private Set<Services> services;

    // Getters and Setters
}   


@Entity
public class Services implements Serializable {

    @NotNull
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Id
    private Long serviceId;

    @NotNull
    @Column(unique=true)
    private String name;

    //Getters and Setters

}

上面的代码创建了一个表USER_SERVICES,但我还想在表USER_SERVICES上与另一个表RATINGS建立多对多关系,这将导致另一个表USER_SERVICES_RATINGS。如何用Hibernate / JPA注释定义这种关系?

2 个答案:

答案 0 :(得分:2)

使用用户管理的联接表对象的多向双向(相对常见)

通常用于存储关于连接对象的额外信息,例如创建关系的日期。

public class Foo{
    private UUID fooId;

    @OneToMany(mappedBy = "bar", cascade=CascadeType.ALL)
    private List<FooBar> bars;
}

public class Bar{
    private UUID barId;

    @OneToMany(mappedBy = "foo", cascade=CascadeType.ALL)
    private List<FooBar> foos;
}

@Entity
@Table(name="FOO_BAR")
public class FooBar{
    private UUID fooBarId;

    @ManyToOne
    @JoinColumn(name = "fooId")
    private Foo foo;

    @ManyToOne
    @JoinColumn(name = "barId")
    private Bar bar;

    //You can store other objects/fields on this table here.
}

答案 1 :(得分:1)

您需要创建一个明确的UserServices实体,并根据您的需要设置与Ratings实体的关系。

请记住,在hibernate中,您可以建模实体之间的关系(即您的java对象),而不是db表。