0

データベースに挿入された最後のエンティティをフェッチしようとしています。これは非常に簡単なことだと思いましたが、クエリを実行するたびに、何らかの例外が発生してスローされます。

使用しているコードは次のとおりです。

@Override
public DataStoreMark getLastMark() {

    String selectQuery = "from Mark";
    Query query = em.createNativeQuery(selectQuery, DataStoreMark.class);

    try {
        return (DataStoreMark) query.getSingleResult();
    } catch (NoResultException e) {
        log.error("Couldn't find any Marks in the DataStore.");
    }

    return null;
}

ただし、このコードはPesistenceExceptionをスローします。

org.hibernate.exception.SQLGrammarException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'from milestone' at line 1

そして、データベースには間違いなくレコードがあります。

何か案は?

4

1 に答える 1

0

次のいずれかを使用できます。機能しない場合はcreateQuery()、次のいずれかを使用できます。createSqlQuery()

1.1。

String selectQuery = "from Mark";
Query query = em.createQuery(selectQuery);
return (DataStoreMark) query.list().get(0);

2.2。

String selectQuery = "select * from Mark";
SQLQuery query = (SQLQuery) em.createSQLQuery(selectQuery);
query.addEntity(DataStoreMark.class);
return query.list();

hibernateは、データベースに最後に追加されたエンティティについては通知しないと思います。または、データベースに固有のクエリを記述し、createSqlQuery()上記のように使用して実行することもできます。

于 2012-12-10T10:05:50.577 に答える