2016-06-23 10 views
0

次のエラーが表示されます。 "com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:SQL構文にエラーがあります。私は、MySQLに直接このクエリを入力すると、それは完璧に動作しますので、私のミスで、ここで「Card.findPrefix」」Javaネイティブクエリ - com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException

for: 

    @NamedNativeQueries({ 
     @NamedNativeQuery(name = "Card.findPrefix", 
       query = "SELECT DISTINCT(FLOOR(c 

    .number/10000)) FROM Card c") 
    }) 

    public List<Integer> findPrefix(){ 
      Query q = em.createNativeQuery("Card.findPrefix"); 
      try{ 
       return q.getResultList(); 
      }catch(Exception ex){ 
       ex.printStackTrace(); 
       return null; 
      } 
     } 

近くで使用する権利構文についてはMariaDBサーバーのバージョンに私は理解することはできません。

答えて

2

createNativeQueryの代わりにcreateNamedQueryを使用する必要があります。

EntityManager JavaDoc

createNativeQuery(文字列SQLSTRING)

から、例えば、更新または削除、ネイティブSQL文を実行するためのクエリのインスタンスを作成します。

createNamedQuery(文字列名)

(れるJava Persistenceクエリ言語またはネイティブSQLで)名前付きクエリを実行するためのクエリのインスタンスを作成します。

あなたのコードでは、SQLクエリとしてクエリ名 'Find ....'を実行しています。

右いずれか

Query q = em.createNamedQuery("Card.findPrefix"); 
0

最終的なコードは次のとおり

public List<Integer> findPrefix(){ 
     Query q = em.createNamedQuery("Card.findPrefix"); 
     List<Integer> res = new ArrayList<Integer>(); 
     for(Object row : (List<Object>) q.getResultList()){ 
      res.add(((BigInteger)row).intValue()); 
     } 
     return res; 
    } 
    @NamedNativeQueries({ 
    @NamedNativeQuery(name = "Card.findPrefix", 
      query = "SELECT DISTINCT(FLOOR(c.number/10000)) FROM Card c") 
}) 
関連する問題