createNativeQuery 到 select 实体 POJO 中给定的特定列

createNativeQuery to select specific Columns given in entity POJO

我有一个名为 CUSTOMER 的 table,其中包含 100 多个 COLOUMNS。但是我只想 select 我在 POJO 中指定的 6 列:

实体 POJO:

  @Entity
    @Data
    @Table(name = "CUSTOMER")
    public class CustomerEntity {

        @Id
        @Column(name = "C_ID")
        private String customerId;

        @Id
        @Column(name = "C_KEY")
        private String customerKey;

        @Column(name = "NAME")
        private String name;

        @Column(name = "FIRST_NAME")
        private String firstName;

        @Column(name = "LAST_NAME")
        private String lastName;

        @Column(name = "AGE")
        private String age;
    }

本机查询:

String query = "select * from CUSTOMER where (C_ID= '1' AND C_KEY= '12') OR (C_ID= '1' AND C_KEY= '13')) AND AGE>25";

Query q = e.createNativeQuery(query,CustomerEntity.class);

[编辑:出于使用本机查询的原因]

选择本机查询的原因:

  1. 我需要在 JPA 中执行以下复杂查询。
  2. 在复杂查询中,我有子查询,解析方法调用。我假设如果我需要实现这一点,那么本机查询会有所帮助。
  3. 上面我写的原生查询只是为了测试最里面的查询。

复杂逻辑:

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;

问题:

  1. 因为它是一个命名查询,所以我无法将查询作为

    字符串查询="select cu from CustomerEntity cu where ((cu.customerId = '1' AND cu.customerKey = '12') or (cu.customerId = '1' AND cu.customerKey = '13') AND cu.age > 25)";

如果我使用此查询,我会收到 ORA -00947 Table 或视图不存在异常。

  1. 是否可以只获取特定的列?

您必须使用别名才能使其正常工作。否则持久性提供者将不知道如何执行匹配:

select c_id as customerId, c_key as customerKey...
from CUSTOMER 
where ...

别名应与您映射到的实体class的相应字段名称完全相同。