我有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。谢谢网!
要使用 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);
}