我有两个具有多对多关系的表,它们具有如下所示的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注释定义这种关系?
答案 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表。