2017-06-14 5 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クエリを書いています。 org.hibernate.hql.internal.ast.QuerySyntaxException:私は、エラーの下に取得しています

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

、によって引き起こされるこのエラー

を解決する方法を教えてくださいi.sbgは私を選択[マッピングされていませんbe.g00glen00b.model.Utilizationから私は、i.sbgのどこs.sbgCodeは=:sbgCode]

あなたはJPQLクエリに上記のSQLクエリを作成する方法を教えていただけますか? 私はこれに新しいので、JPQL結合を学習するためのリンクを提案してください。クラス以下

2つのテーブル

  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をご覧ください。

関連する問題