2011-08-03 19 views
0

誰かが私に解決策を教えてくれるのであれば、Hibernateで何の問題も起こらなかった以下のクエリを実行しようとすると、 :問題HibernateからEclipseLink 2.0へのntiveクエリーのマイグレーション

エンティティ(Step.java):

@Entity 
@Table(name = "IAS_STEP") 
public class Step implements Serializable { 
    @Id 
    private Long id; 

    @Temporal(TemporalType.DATE) 
    private Date tarih; 

    private long formId; 

    private Byte faz; 

    // getters, setters, etc. 
} 

コントローラクラスのメソッド:

public byte getMaxPhase(String sid, long form_id) { 
    EntityManager em = getEntityManager(); 
    try { 
     Query q = em 
       .createQuery(
         "select max(faz) as mf from Step s where s.id = :sid and s.formId = :formId") 
       .setParameter("sid", sid) 
       .setParameter("formId", form_id); 
     return ((Byte) q.getSingleResult()).byteValue(); 
    } finally { 
     em.close(); 
    } 
} 

これは、Hibernateが、カリフォルニア州うまく働いEclipseLink 2.0でエラーを使用します。

誰でも回避策を提案できますか?

+2

(あなたはJPQLないネイティブSQLクエリを実行している)されなければなりませんか? – dunni

+1

ネイティブクエリはどこにありますか?エラーは何ですか?あなたは 'em.createNativeQuery(...)'ではなく 'em.createQuery(...)'を使っています。 –

+0

Hibernateでは、ネイティブクエリとオブジェクト接頭辞がなくてもうまく動作しましたが、ベストプラクティスのためにネイティブクエリに変換しました。 'BigDecimal bd;質問q = em.createNativeQuery(「max(faz)をIAS_STEP aaからmfとして選択します。aa.id =?およびaa.form_id =?」).setParameter(1、id).setParameter(2、form_id); BigDecimal bd =(BigDecimal)q.getSingleResult(); if(bd!= null)sonuc =(Byte)bd.byteValueExact(); sonuc return; '問題はいずれかの方法で解決されます。 – Skyhan

答えて

1
max(faz) 

は、

max(s.faz) 

あなたはどのようなエラーが出るん

+0

james、答えは正しいですし、問題のいくつかを解決しますが、ネイティブクエリに変換せずにEclipseLinkで動作することはありませんでした。上記の私の以前のコメントを見てください。 – Skyhan

関連する問題