如何在JPA查询中包含大于Date的日期?

时间:2012-11-28 18:24:05

标签: java jpa jpql

我有一个基于JPA的项目,如下:

@Entity
@Table(name="events")
public class Event implements Serializable {
  @Id
  @GeneratedValue(strategy=GenerationType.AUTO)
  private Long id;
  private String data;
  @Temporal(TemporalType.TIMESTAMP)
  private java.util.Date eventDate;

/* ... getters & setters */
}

在我的DAO中,我这样做:

public void checkForEvents(String text, java.util.Date myDate) {

  String query = "SELECT e FROM Event e WHERE e.data LIKE '%?1%' AND e.eventDate > ?2";
  Query q = getEntityManager().createQuery(query);
  q.setParameter(1, text);
  q.setParameter(2, myDate);
  q.getSingleResult() /* and so on ... */

}

当我运行DAO代码时,我收到此错误:

The parameter "0" is of type "java.lang.String", but the declaration in the query is for type "java.util.Date".

我做错了什么?

2 个答案:

答案 0 :(得分:2)

该消息看起来很奇怪,但错误在第一个参数中。您只能将值作为参数传递,因此您应该将e.data LIKE '%?1%'替换为e.data LIKE ?1,并使用Java代码中的%将文本括起来。

答案 1 :(得分:1)

我认为它与某些事实有关,即你不能在文字中使用参数(即'%?1%')。

请尝试以下查询:

SELECT e FROM Event e WHERE e.data LIKE CONCAT('%', ?1, '%') AND e.eventDate > ?2