我正在運行一個 Spring Boot 應用程式 JPA 的行為非常不同,具體取決于使用它的具體情況。我們在嘗試運行獲取轉換器型別例外問題時創建了一個 JPA 查詢。
這是我嘗試過的 UHG 表與其他表沒有任何外鍵約束
@Entity
@Table("uhg")
public class UHG {
@Id
@Column(name="uhg_no")
private Integer uhgNo;
private String section;
private String area;
private String zip;
private String rwd;
// getter setter
}
@Entity
@Table("section")
public class Section {
@Id
@Column(name="id")
private Integer id;
private String name;
// getter setter
}
@Entity
@Table("area")
public class Area {
@Id
@Column(name="id")
private Integer identifier;
@ManyToOne
@JoinColumn(name="section_id",referencedColumnName = "id")
private Section section;
private String name;
//getter setter
}
@Repository
public interface UHGRepo extends JpaRepository<UHG, Integer> {
@Query("SELECT a.area, b.id FROM UHG a JOIN Section b ON b.name=a.section LEFT JOIN Area c ON c.name=a.area AND c.section.id=b.id WHERE a.section IS NOT NULL AND a.area IS NOT NULL AND c.identifier IS NULL AND a.zip='Ye12Y'")
List<Area> findAreaSection();
}
呼叫時,findAreaSection()我們得到 ConversionFailedException,沒有找到能夠從 Type... 轉換為其他 Type... 的轉換器
如果我使用 List<Object[]> findAreaSection(); 查詢正在回傳結果。
我認為撰寫查詢存在問題,可能是我沒有以正確的方式撰寫連接。
uj5u.com熱心網友回復:
您正在嘗試將選擇轉換為您沒有的另一個物體。您需要為此查詢創建一個 DTO(或 POJO)并修改您的查詢。
@Repository
public interface UHGRepo extends JpaRepository<UHG, Integer> {
@Query("SELECT new set.your.package.here.QueryResponse(a.area, b.id) FROM UHG a JOIN Section b ON b.name=a.section LEFT JOIN Area c ON c.name=a.area AND c.section.id=b.id WHERE a.section IS NOT NULL AND a.area IS NOT NULL AND c.identifier IS NULL AND a.zip='Ye12Y'")
List<QueryResponse> findAreaSection();
}
您將創建此物件(我的示例為 QueryResponse),并且該物件應該有一個建構式。您需要在建構式中設定具有所需資料型別的引數。
更多資訊:https ://www.baeldung.com/jpa-queries-custom-result-with-aggregation-functions
uj5u.com熱心網友回復:
為什么不直接回傳 c ?
@Query("SELECT Distinct c FROM UHG a JOIN Section b ON b.name=a.section LEFT JOIN Area c ON c.name=a.area AND c.section.id=b.id WHERE a.section IS NOT NULL AND a.area IS NOT NULL AND c.identifier IS NULL AND a.zip='Ye12Y'")
List<Area> findAreaSection();
uj5u.com熱心網友回復:
你必須使用@nativeQuery,當你呼叫原生查詢時,你可以直接在de方法上面寫你的sql查詢
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/467751.html
