2017-06-14 54 views
0

下面的查詢在mysql中正常工作。Custome Spring中的錯誤-JPA

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沒有映射[選擇I從be.g00glen00b.model.Utilization我,i.sbg s其中s.sbgCode =:sbgCode]

你能告訴我怎麼寫上面的SQL查詢來JPQL查詢? 請建議一些鏈接學習JPQL加入,因爲我是新手。

下面類表示兩個表

  1. SBG類

    @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庫

    01之間的映射
+0

請檢查答案。 – ozgur

回答

0

您在查詢中缺少JOIN

您的查詢應該像

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

當你做這樣你需要記住,你可能會得到重複的結果返回的查詢。如果你想得到獨特的結果,你應該使用Set或看看this的方式來實現它與暗示和休眠。