Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql createNativeQuery选择实体POJO中给定的特定列_Sql_Oracle_Hibernate_Jpa_Jpql - Fatal编程技术网

Sql createNativeQuery选择实体POJO中给定的特定列

Sql createNativeQuery选择实体POJO中给定的特定列,sql,oracle,hibernate,jpa,jpql,Sql,Oracle,Hibernate,Jpa,Jpql,我有一个名为CUSTOMER的表,其中包含100多个列。但我只想选择我在POJO中指定的6列: 实体POJO: NativeQuery: [编辑:出于使用本机查询的原因] 选择本机查询的原因: 我需要在JPA中执行下面的复杂查询。 在复杂查询中,我有子查询,分析方法调用。我假设如果我需要实现这一点,那么本机查询将有所帮助。 我编写的上述本机查询只是为了测试最内部的查询。 复杂逻辑: 问题: 因为它是一个namedQuery,所以我无法将查询作为 字符串查询=从CustomerEntity cu中

我有一个名为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表或视图不存在异常

是否可以只获取特定列?
你必须使用别名才能工作。否则,持久性提供程序将不知道如何执行匹配:

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 ...