如何查询一对多关系中的特定列 - Spring data JPA?

问题描述 投票:0回答:1

我有2节课

@Entity
public class User implements Serializable {

        @Id
        private String id;

        @Column(name = "name")
        private String name;

        @Column(name = "age")
        private String age;

        @OneToMany(fetch = FetchType.LAZY)
        @JoinColumn(name = "user_id")
        private List<Address> addresses= new ArrayList<>();

}
@Entity
public class Address implements Serializable {

        @Id
        private String id;

        @Column(name = "actualAddress")
        private String actualAddress;

        @Column(name = "code")
        private String code;

        @Column(name = "country")
        private String country;

}

我需要获取一个用户列表,其中每个用户都有一个地址列表。问题是如果我像这样执行sql:

@Query("select u from User where u.id = :userId")
List<User> getUserAndAddress(@Param("userId") String userId);

由于一对多关系,Hibernate 将获取所有地址字段,知道如何编写 sql 查询来获取仅包含具有 id 和 code 的地址的用户列表吗?我正在使用 JPA 和 postgres。谢谢网!

java sql spring-boot spring-data-jpa one-to-many
1个回答
0
投票

要使用 Spring Data JPA 查询一对多关系中的特定列,通常会获取父实体,然后导航其子实体集合。

假设您有两个实体:Parent 和 Child,其中 Parent 与 Child 具有一对多关系。

使用JPQL

@Repository
public interface ParentRepository extends JpaRepository<Parent, Long> {
    @Query("SELECT p.name, c.name FROM Parent p JOIN p.children c WHERE p.id = :parentId")
    List<Object[]> findSpecificColumnsByParentId(@Param("parentId") Long parentId);
}

使用查询方法

@Repository
public interface ParentRepository extends JpaRepository<Parent, Long> {
    List<Parent> findById(Long parentId);
    @Query("SELECT p.name, c.name FROM Parent p JOIN p.children c WHERE p.id = :parentId")
    List<Object[]> findSpecificColumnsByParentId(@Param("parentId") Long parentId);
}
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.