JPA本机sql查询映射错误?
Posted
技术标签:
【中文标题】JPA本机sql查询映射错误?【英文标题】:JPA native sql query mapping error? 【发布时间】:2017-08-24 14:30:14 【问题描述】:我有一个 JPA 实体 MyEntity
,它在 @Embeddable
类 MyEntityPK
中包含一个复合主键。
我在方法 getThreeColumnsFromMyEntity()
中使用原生 sql 查询:
public List<MyEntity> getThreeColumnsFromMyEntity()
List<MyEntity> results = em.createNativeQuery("select pid,name,dateofbirth from (select pid,name, dateofbirth,max(dateofbirth) "
+ "over(partition by pid) latest_dateofbirth from my_entity_table) where"
+ " dateofbirth = latest_dateofbirth;","myEntityMapping").getResultList();
return results;
我的@SqlResultSetMapping
:
@SqlResultSetMapping(
name = "myEntityMapping",
entities =
@EntityResult(
entityClass = MyEntityPK.class,
fields =
@FieldResult(name = "PID", column = "pid"),
@FieldResult(name = "NAME", column = "name")),
@EntityResult(
entityClass = MyEntity.class,
fields =
@FieldResult(name = "dateofbirth", column = "dateofbirth")))
我的 JPA 列被命名为:@Column(name="DATEOFBIRTH")
、"PID"
和 "NAME"
。
我直接在数据库上测试了我的 sql 语句,它工作正常。
当我在 Eclipse 上运行它时,我得到一个 Oracle 错误:
ORA-00911 和“错误代码 911,查询:ResultSetMappingQuery [..]
我的猜测是映射有问题,但我不知道它是什么。
【问题讨论】:
始终检查 Oracle 错误消息是什么,在本例中为ORA-00911: invalid character
这为您提供了开始调查的提示
【参考方案1】:
我假设您收到此错误是因为您缺少子查询的别名,因此您可以试试这个:
select
pid,
name,
dateofbirth
from
(
select
pid,
name,
dateofbirth,
max(dateofbirth) over(partition by pid) AS latest_dateofbirth
from
my_entity_table
) second_result
-- ^--------------- use an aliase name to the subquery
where
second_result.dateofbirth = latest_dateofbirth
-- ^----use the aliase name to reference to any of its fields, in your case 'dateofbirth'
看看这里的错误含义ORA-00911: invalid character tips
【讨论】:
以上是关于JPA本机sql查询映射错误?的主要内容,如果未能解决你的问题,请参考以下文章
本机查询支持 SQL Server 的 Spring 数据 jpa 流