如何自我加入实体以使用JPA创建一组实体?

时间:2014-06-10 16:19:55

标签: database jpa join

我有这个实体product,当我有任何成员且产品只能在一个组或者一个产品中时,我想加入它以创建一个组并可以访问该组的其他成员没有,试图测试这个:

@Entity
@Table(name = "product")
public class Product {

@Id
@GeneratedValue
private Long id;

@Column
private String name;
@Column
private Long groupId;

@OneToMany
@JoinColumn(name = "groupId")
private List<Product> group;
  • 我可以编写另一个名为group的实体并使用它加入,但这是最好的方式,因为group只会带有ID,我在这里寻找最佳实践,谢谢

1 个答案:

答案 0 :(得分:0)

无法在JPA中完成,因为JPA限制外键引用ID字段,而您希望groupId在组中指定其他唯一的内容。您可能会使组发生瞬态,而是通过查询从实体管理器中获取它:

@Transient
private List<Product> group;

public List<Product> getGroup(EntityManager em) {
  if (group==null) {
    group = em.createQuery("Select p from Product p where p.groupId = :groupId").setParameter("groupId", this.getGroupId()).getResultList();
  }
  return group;
}