簡體   English   中英

Custome Spring-Jpa中的錯誤

[英]Error in Custome Spring-Jpa

下面的查詢在mysql中工作正常。

SELECT * FROM utilization u INNER JOIN sbg s on s.sbg_code=u.sbg_code where u.sbg_code=104 

我已經在JPQL查詢下面寫了。

@Query("SELECT i FROM Utilization i,i.sbg s where s.sbgCode = :sbgCode")
        public ArrayList<Utilization> findUtilization(@Param("sbgCode") int sbgCode);

我遇到錯誤,請告訴如何解決此錯誤

由以下原因引起:org.hibernate.hql.internal.ast.QuerySyntaxException:未映射i.sbg [從be.g00glen00b.model.Utilization i,i.sbg中選擇SELECT,其中s.sbgCode =:sbgCode]

您能告訴我如何將上述sql查詢寫入JPQL查詢嗎? 請提出一些鏈接以學習JPQL聯接,因為我對此並不陌生。

下類表示兩個表之間的映射

  1. 單板級

     @Entity public class sbg { @Id @GeneratedValue(strategy = GenerationType.AUTO) private int sbgCode; private String sbgdesc; @ManyToOne(fetch=FetchType.EAGER) @JoinColumn(name="iccode") @JsonIgnore private Ic ic; @OneToMany(mappedBy="sbg1", fetch=FetchType.EAGER) private List<Utilization> utilization; public int getSbgCode() { return sbgCode; } public void setSbgCode(int sbgCode) { this.sbgCode = sbgCode; } public String getSbgdesc() { return sbgdesc; } public void setSbgdesc(String sbgdesc) { this.sbgdesc = sbgdesc; } public Ic getIc() { return ic; } public void setIc(Ic ic) { this.ic = ic; } } 
  2. 利用等級

     package be.g00glen00b.model; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; @Entity public class Utilization { @Id @GeneratedValue(strategy = GenerationType.AUTO) private int asset_type_key; private String asset_type; private String Engine_status; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "sbgCode") private sbg sbg1; public sbg getSbg1() { return sbg1; } public void setSbg1(sbg sbg1) { this.sbg1 = sbg1; } public int getAsset_type_key() { return asset_type_key; } public void setAsset_type_key(int asset_type_key) { this.asset_type_key = asset_type_key; } public String getAsset_type() { return asset_type; } public void setAsset_type(String asset_type) { this.asset_type = asset_type; } public String getEngine_status() { return Engine_status; } public void setEngine_status(String engine_status) { Engine_status = engine_status; } } 
  3. jpa資料庫

     public interface UtilizationRepository extends JpaRepository<Utilization, Integer> { @Query("SELECT i FROM Utilization i,i.sbg s where s.sbgCode = :sbgCode") public ArrayList<Utilization> findUtilization(@Param("sbgCode") int sbgCode); } 

您在查詢中缺少JOIN

您的查詢應如下所示

SELECT i FROM Utilization i JOIN i.sbg s where s.sbgCode = :sbgCode

進行此類查詢時,請記住,可能會得到重復的結果。 如果要獲得獨特的結果,則應使用Set對此進行查看,以獲取通過提示和休眠實現它的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM