0
我在春季數據jpa中創建了left join
查詢,JPQL
但在我的單元測試中失敗。項目中有兩個實體。在春季數據中使用JPQL加入查詢Jpa
Product
實體:
@Entity
@Table(name = "t_goods")
public class Product implements Serializable {
@Id
@GeneratedValue
@Column(name = "id", length = 6, nullable = false)
private Integer id;
@Column(name = "name", length = 20, nullable = false)
private String name;
@Column(name = "description")
private String desc;
@Column(name = "category", length = 20, nullable = false)
private String category;
@Column(name = "price", nullable = false)
private double price;
@Column(name = "is_onSale", nullable = false)
private Integer onSale;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "brand_id")
private Brand brand;
// getter and setter
}
Brand
實體:
@Entity
@Table(name = "tdb_goods_brand")
public class Brand implements Serializable {
@Id
@GeneratedValue
@Column(name = "id", length = 6, nullable = false)
private Integer id;
@Column(name = "brand_name", unique = true, nullable = false)
private String name;
@OneToMany(mappedBy = "brand", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
private List<Product> products;
// getter and setter
}
而第三類Prod
映射查詢結果對象:
public class Prod implements Serializable {
private Integer id;
private String name;
private double price;
//private String brandName;
// getter and setter
}
它正常工作與此查詢:
public interface ProductRepository extends JpaRepository<Product, Integer> {
@Query(value = "select new com.pechen.domain.Prod(p.id, p.name, p.price) from Product p ")
Page<Prod> pageForProd(Pageable pageRequest);
}
但如果我對Prod
增加新屬性brandName
與left join
重構查詢時,它測試失敗:
@Query(value = "select new com.pechen.domain.Prod(p.id, p.name, p.price, b.name) from Product p left join com.pechen.domain.Brand b on p.brand_id = b.id")
Page<Prod> pageForProd(Pageable pageRequest);
這個問題似乎是在這裏on p.brand_id = b.id
因爲沒有一個brand_id
財產Product
,它只是一個列名。那我該如何做這項工作?
更新:
有原來是在JPQL
查詢的一些語法時才錯誤,只是修復它,如下所示:
@Query(value = "select new com.pechen.domain.Prod(p.id, p.name, p.price, b.name) from Product p left join p.brand b")
Page<Prod> pageForProd(Pageable pageRequest);
此外,它以這種方式來創建另一個類很麻煩每次將查詢結果映射到對象(我的意思是Prod
類)。那麼有沒有一種好的方法來處理它?任何幫助,將不勝感激。