0

次のような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".

私は何を間違っていますか?

4

2 に答える 2

1

メッセージは奇妙に見えますが、エラーは最初の引数にあります。パラメータとして渡すことができるのは値のみであるため、Javaコードでは、に置き換えe.data LIKE '%?1%'e.data LIKE ?1テキストを囲む必要があります。%

于 2012-11-28T18:29:48.077 に答える
0

リテラル内でパラメーターを使用できないという事実に何らかの形で関連していると思います(つまり'%?1%')。

代わりに次のクエリを試してください。

SELECT e FROM Event e WHERE e.data LIKE CONCAT('%', ?1, '%') AND e.eventDate > ?2
于 2012-11-28T18:29:15.270 に答える