首页 > 解决方案 > Spring Data JPA / Hibernate - @Repository 中的 findByY(String y) 方法,其中 Y 可通过对象 X 访问

问题描述

我有一个用户存储库:

@Repository
public interface UserRepository extends JpaRepository<User, Long>
{
}

用户:

@Entity
@Table(name = 'user')
public class User
{
    @Id
    private Long id;

    @OneToOne(mappedBy = "owner", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    private UserDetails userDetails;
}

和用户详细信息:

@Entity
@Table(name = 'user_details')
public class UserDetails
{
    @Id
    private Long id;

    @OneToOne(fetch = FetchType.LAZY)
    @MapsId
    private User owner;

    private String name;
}

包、导入、getter 和 setter 被排除在更简洁的代码之外。


现在,我怎样才能通过他们的名字找到用户?将此添加到 UserRepository 接口将不起作用:

List<User> findByName(String name);

因为它抛出:

No property name found for type User

我正在寻找这样的东西:

List<User> findByNameOfUserDetails(String name);

标签: javahibernatejpaspring-data-jparepository

解决方案


请在此处查看 Spring Data JPA 文档。

你需要类似的东西findByUserDetailsName(String name)。要解决这种歧义,您可以_在方法名称中使用手动定义遍历点。所以我们的方法名是findByUserDetails_Name(String name).


推荐阅读