JPA相当于Hibernate NamedQuery的setCharacter(..),setDate(..)等......?

时间:2018-02-13 11:22:25

标签: java hibernate jpa

我想在JPA中设置日期和字符。 Hibernate中有一些特殊的方法如下:

Query q = session.getNamedQuery(namedQuery);
q.setDate(0, (Date) (params[i]));
q.setCharacter(1, params[i]);
q.executeUpdate();

JPA中有setCharacter()的任何内容吗?

我知道setParameter()Date,但我不知道如何使用Character。我想将其转换为JPA查询参数,如:

Query q = getEntityManager().createNamedQuery(namedQuery);
// How to set Date and Character in JPA ?
...
q.executeUpdate();

1 个答案:

答案 0 :(得分:1)

您的评论:

  

雅但我必须使用条件将其区分为字符串,日期或字符..

不,您不必区分。假设您使用命名查询,则只需使用setParam(..)。假设您已命名查询,如:

@NamedQuery(name="DateCharacter.findOlderByChar",
        query="SELECT dc FROM DateCharacter dc "
             +"WHERE dc.date<:date AND dc.character=:character")

设置参数就像:

Query query = em.createNamedQuery("DateCharacter.findOlderByChar");
query.setParameter("date", new Date());
query.setParameter("character", 'a');

如果您需要投射,请在setParam(..)上执行:

query.setParameter("character", (char)97); // ascii code for 'a'

如果你需要任何条件来确定如何在设置参数之前进行投射。

但是如果你试图为字符添加一个错误类型的param(如字符串):

query.setParameter("character", "a string");

你最终会得到一个例外:

  

引起:java.lang.ClassCastException:无法将“class java.lang.String”类型的对象“a string”转换为“class java.lang.Character”的实例。