使用JPA执行查询时出错

时间:2012-01-11 18:27:21

标签: java mysql jpa

我正在尝试在Mysql数据库上使用带有此字符串的日期时间列数据类型的SQL语句Order by JPA对结果集进行排序:

Query query = em.createQuery("SELECT e FROM Events e Order by e.EventDateTime;");

使用createQuery方法java返回错误:

SEVERE: Local Exception Stack: 
Exception [EclipseLink-8030] (Eclipse Persistence Services - 2.3.0.v20110604-r9504): 

org.eclipse.persistence.exceptions.JPQLException
Exception Description: Error compiling the query [Events.findByGameId: SELECT e FROM Events e WHERE e.gameId = 

:gameId ORDER BY e.EventDateTime DESC], line 1, column 59: unknown state or association field [EventDateTime] of class [com.jogogestao.entity.Events].
    at org.eclipse.persistence.exceptions.JPQLException.unknownAttribute(JPQLException.java:457)
    at org.eclipse.persistence.internal.jpa.parsing.DotNode.validate(DotNode.java:88)
    at org.eclipse.persistence.internal.jpa.parsing.OrderByItemNode.validate(OrderByItemNode.java:52)
    at org.eclipse.persistence.internal.jpa.parsing.OrderByNode.validate(OrderByNode.java:61)
at org.eclipse.persistence.internal.jpa.parsing.ParseTree.validate(ParseTree.java:210)

我尝试按整数类型primary排序,所有运行都正常......但这不是我想要的。 使用createNativeQuery语句运行正常......

Query query = em.createNativeQuery("SELECT * FROM Events Order by EventDateTime;");

唯一的问题是返回对象不是Events类型对象(来自实体),我无法转换为此类型。

问题可能是JPA不支持对datetime字段进行排序吗?

我怎样才能解决这个问题?

我正在使用Netbeans 7.0.1,Glassfish 3.1.1,MySql 5.5.19社区服务器(GPL)和mysql-connector-java-5.1.15-bin.jar。

谢谢!

2 个答案:

答案 0 :(得分:0)

SELECT e FROM Event e ORDER BY e.eventDateTime
  • 您没有* - 您必须指定您选择的实体
  • 最后不要加分号
  • 使用全小写关键字,大写字母实体名称和低级案例属性名称
  • 以单数形式命名实体,而不是复数(Event vs Events

答案 1 :(得分:0)

消息很明确:实体事件中没有EventDateTime映射属性(或字段,如果字段直接映射)。如果您遵守Java约定,则字段/属性应命名为eventDateTime,而不是EventDateTime