【发布时间】:2015-07-20 12:41:40
【问题描述】:
当 OpenJPA 将我的常量值替换为 SQL 参数时,我似乎对 CHAR 字段的查询有问题。
示例
在 Oracle 中给定这张表
create table PERSON (
id char(10) not null,
type char(3) not null,
primary key (id)
)
type 具有三个不同的值:WTW、WAI、V
以及对应的实体
@Entity
public class Person {
String id;
String type;
}
我使用 orm.xml 文件中的以下查询:
<named-query name="person.v">
<query>
select p
from Person p
where p.type = 'V'
</query>
</named-query>
问题
当我通过 OpenJPA 提供的 EntityManager 运行它时,查询变为
select p.id, p.type
from PERSON p
where p.type = ?
并且 OpenJPA 将值 "V" 作为参数传递。 type 以前的“常量”值现在是一个 SQL 参数。问题在于,对于char(3)type列,Oracle会存储
"V "
这不等于 OpenJPA 作为参数传递的值。再说一遍:没有参数,即只使用我在 JPQL 中使用的 SQL 中的字符串,一切正常。
我假设 OpenJPA 执行此替换是为了通过规范化所有查询来最小化查询缓存,我知道这对很多人来说有很大的不同,但我认为这对我来说是个问题。
我现在的问题是:如何防止 OpenJPA 进行这种替换?我知道在运行时我不会有这个查询的不同排列。是否有我可以使用的配置属性或查询提示?
【问题讨论】: