java Spring数据JPA:查询多对多

j2cgzkjk  于 2023-03-16  发布在  Java
关注(0)|答案(4)|浏览(160)

我有实体UserTest

@Entity
public class User {
    private Long id;
    private String userName;
}

@Entity
public class Test {
    private Long id;

    @ManyToMany
    private Set<User> users;
}

我可以按用户实体获取所有测试:

public interface TestRepository extends JpaRepository<EventSettings, Long> {
    List<Test> findAllByUsers(User user);
}

但是我可以使用哪个查询来查找userName的所有测试呢?

hfyxw5xn

hfyxw5xn1#

下面的方法签名将得到你想要的:

List<Test> findByUsers_UserName(String userName)

这是使用Spring Data JPA的属性表达式特性。签名Users_UserName将被转换为JPQL x.users.userName。注意,这将对给定的用户名执行精确匹配。

brtdzjyr

brtdzjyr2#

我使用了@JoinTable,我让它可以工作:

@Query("select t from Test t join t.users u where u.username = :username")
List<Test> findAllByUsername(@Param("username") String username);

t.users u而不是User u

lf5gs5x2

lf5gs5x23#

另一个答案显示了如何使用函数命名技术实现所需的功能。我们可以使用@Query注解实现相同的功能,如下所示:

@Query("select t from Test t join User u where u.username = :username")
List<Test> findAllByUsername(@Param("username")String username);
cunj1qz1

cunj1qz14#

您也可以使用无下划线的

List<Test> findByUsersUserName(String userName)

相关问题