2012-12-10 32 views
0

我試圖獲取插入到數據庫中的最後一個實體,我認爲這是一個非常簡單的事情,但是我嘗試的每個查詢都會導致某種異常拋出選擇最後一個插入了休眠的實體

使用的代碼IM是:

@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 

,絕對沒有在數據庫中的記錄。

任何想法?

+0

你在混合使用HQL查詢的'createNativeQuery',甚至糾正它不會給你最後插入的實體。 – madth3

回答

0

您可以使用的createQuery()createSqlQuery()如果它不工作:

1.

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

2.

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

我覺得Hibernate不告訴去年實體添加到數據庫。或者,您可以編寫特定於您的數據庫的查詢並使用createSqlQuery()運行它,如上所示。