jpa 从表(多对多自连接)Hibernate中获取数据的最佳方法是什么?

ykejflvf  于 2022-11-14  发布在  其他
关注(0)|答案(2)|浏览(163)

我有一个表,保存了两个人,所以,在Friendship中有person_a_idperson_b_id,很明显,这是一个多对多的关系。
有了SQL,我们可以通过使用selectjoin来获得一个人的所有朋友。
问题是当我使用Hibernate(Sping Boot )时。我使用了https://www.roseindia.net/hibernate/hibernate4/ManytoManySelfJoin.shtml指令
这是两个表之间的many to many连接。但是它们没有显示如何从表中取回数据。
谁能告诉我如何完成它?或者更好的方法?

mspsb9vt

mspsb9vt1#

您应该创建一个新表,用于保存友谊和Person表之间的链接。表Person_FriendShip列= person_id,friendship_id
定义实体时,应添加

Person Entity class:
@ManyToMany(cascade= CascadeType.ALL)
@JoinTable(
name="Person_FriendShip",
joinColumns=@JoinColumn(name="person_id"),
inverseJoinColumns=@JoinColumn(name="friendship_id"))
Set<FriendShip> friendships=new Hashset<>();

in Friendship Entity Class:
@ManyToMany(mappedBy="friendship")
Set<Person> persons=new HashSet<>();

这将在2个实体之间建立M2M关系,并在您将其与JPA Repo一起使用时提供所需的数据。

pzfprimi

pzfprimi2#

使用链接的Faculty示例,因为您尚未显示实体,您可以急切地获取如下所示的同事和同事

// Assume Faculty with Id=1 exists
    Faculty faculty = entityManager.createQuery(
                    "SELECT c FROM Faculty c " +
                            "LEFT JOIN FETCH c.coworkers " +
                            "LEFT JOIN FETCH c.colleagues " +
                            "WHERE c.facultyId = :facultyId", Faculty.class)
            .setParameter("facultyId", 1L)
            .getSingleResult();

请记住,在一个查询中获取多个集合的性能可能会较低,如果集合是列表,则会出现MultipleBagFetchException

相关问题