1 回答

TA貢獻1865條經驗 獲得超7個贊
JPA 查詢
您可以按照下一種方法指示左連接:
@Query("SELECT new com.your.package.dto.UserDetailOrderCountDto(u.firstName, u.lastName, COUNT(o)) "
+ "FROM User u LEFT JOIN u.orders o group by u.firstName, u.lastName")
List<UserDetailOrderCountDto> findUsersAndOrderCount();
只需確保將類屬性更改orderCount為 long:
public class UserDetailOrderCountDto {
private String firstName;
private String lastName;
private long orderCount;
public UserDetail() {
}
public UserDetail(String firstName, String lastName, long orderCount) {
this.firstName = firstName;
this.lastName = lastName;
this.orderCount = orderCount;
}
// Getters and setters
}
請注意,這適用于您User班級的以下配置:
@OneToMany(mappedBy = "user", fetch = FetchType.LAZY)
private Set<Order> orders;
使用本機查詢
您可以改用本機查詢,因此您可以定義左連接:
@Query(value = "select u.first_name as firstName, u.last_name as lastName, count(o.id) as orderCount from user u left join orders o on u.id = o.user_id group by u.first_name, u.last_name;"
, nativeQuery = true)
List<UserDetailOrderCountDto> findUsersAndOrderCount();
您只需要確保生成的列名稱與 bean 的屬性名稱匹配。
此外,在最新版本的 spring 上,您不需要創建 bean,您可以定義一個接口,然后 spring 創建一個從接口繼承的 bean:
public interface UserDetailOrderCountDto {
public String getFirstName();
public String getLastName();
public int getOrderCount();
}
添加回答
舉報