Sql createNativeQuery选择实体POJO中给定的特定列
我有一个名为CUSTOMER的表,其中包含100多个列。但我只想选择我在POJO中指定的6列: 实体POJO: NativeQuery: [编辑:出于使用本机查询的原因] 选择本机查询的原因: 我需要在JPA中执行下面的复杂查询。 在复杂查询中,我有子查询,分析方法调用。我假设如果我需要实现这一点,那么本机查询将有所帮助。 我编写的上述本机查询只是为了测试最内部的查询。 复杂逻辑: 问题: 因为它是一个namedQuery,所以我无法将查询作为 字符串查询=从CustomerEntity cu中选择cu,其中cu.customerId='1'和cu.customerKey='12'或cu.customerId='1'和cu.customerKey='13'和cu.age>25 如果我使用这个查询,我会得到ORA-00947表或视图不存在异常 是否可以只获取特定列?Sql createNativeQuery选择实体POJO中给定的特定列,sql,oracle,hibernate,jpa,jpql,Sql,Oracle,Hibernate,Jpa,Jpql,我有一个名为CUSTOMER的表,其中包含100多个列。但我只想选择我在POJO中指定的6列: 实体POJO: NativeQuery: [编辑:出于使用本机查询的原因] 选择本机查询的原因: 我需要在JPA中执行下面的复杂查询。 在复杂查询中,我有子查询,分析方法调用。我假设如果我需要实现这一点,那么本机查询将有所帮助。 我编写的上述本机查询只是为了测试最内部的查询。 复杂逻辑: 问题: 因为它是一个namedQuery,所以我无法将查询作为 字符串查询=从CustomerEntity cu中
你必须使用别名才能工作。否则,持久性提供程序将不知道如何执行匹配:
select c_id as customerId, c_key as customerKey...
from CUSTOMER
where ...
别名应与映射到的实体类的对应字段名完全相同。必须使用别名才能工作。否则,持久性提供程序将不知道如何执行匹配:
select c_id as customerId, c_key as customerKey...
from CUSTOMER
where ...
别名应该与映射到的实体类的对应字段名完全相同。您编写的第二个查询看起来不正常。此查询中的“ct”是什么?什么是“cu”?这就是您使用的确切查询吗?字符串查询=从CustomerEntity ct中选择ct,其中ct.customerId='1'和ct.customerKey='12'或ct.customerId='1'和ct.customerKey='13'和ct.age>25;也许像that@Rjiuk,我想为实体POJO保留别名namecu。现在我编辑了这个问题。你写的第二个问题看起来不好。此查询中的“ct”是什么?什么是“cu”?这就是您使用的确切查询吗?字符串查询=从CustomerEntity ct中选择ct,其中ct.customerId='1'和ct.customerKey='12'或ct.customerId='1'和ct.customerKey='13'和ct.age>25;也许像that@Rjiuk,我想为实体POJO保留别名namecu。现在我编辑了这个问题。你的意思是我需要为方法createNativeQuery中的每一列使用带别名的select查询吗。对于不存在的问题表或视图,您计划在select中只包含6列,这样就不需要太多hastleOk。但在我的另一个实体中,我需要选择40多列。在这种情况下,如果我选择每个列名,这将是一个大查询?任何简化查询的替代方法如何在不显式执行的情况下指定列的子集?或者您想选择所有列?那么为什么要在这种情况下使用本机查询呢?本机查询通常会更快。您只是失去了orm的所有好处,包括数据库更改重写。但由于复杂性,您的查询。。我将用它创建一个存储过程,并使用JPAAPI调用该过程。如果数据库发生更改,您只需重新编写过程,而不必更改java代码/配置。您的意思是我需要为方法createNativeQuery中的每一列使用带别名的select查询吗。对于不存在的问题表或视图,您计划在select中只包含6列,这样就不需要太多hastleOk。但在我的另一个实体中,我需要选择40多列。在这种情况下,如果我选择每个列名,这将是一个大查询?任何简化查询的替代方法如何在不显式执行的情况下指定列的子集?或者您想选择所有列?那么为什么要在这种情况下使用本机查询呢?本机查询通常会更快。您只是失去了orm的所有好处,包括数据库更改重写。但由于复杂性,您的查询。。我将用它创建一个存储过程,并使用JPAAPI调用该过程。如果数据库发生更改,您只需重新编写过程,而不必更改java代码/配置。
SELECT * FROM (
SELECT row_number() over(order by C_ID, C_KEY) RN, FEW-COLUMNS(
SELECT * FROM BOOK
WHERE (C_ID, C_KEY) IN (customerId1, customerKey1)
(customerId2, customerKey2)
(customerId3, customerKey3)
.....
(customerIdn, customerKeyn) AND ROWNUM <= 340
)WHERE RN BETWEEN anyNumber and anyNumber
)ORDER BY DESC RN;
select c_id as customerId, c_key as customerKey...
from CUSTOMER
where ...