2012-12-10 35 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()运行它,如上所示。