【问题标题】:Hibernate: No query defined (no entity class)Hibernate:没有定义查询(没有实体类)
【发布时间】:2021-10-21 21:45:18
【问题描述】:

有一些相关的问题,例如:

但是,它收到错误:没有为该名称定义查询 [getTestFunction],我儿子不知道该尝试什么了。

我的 Oracle 函数

FUNCTION mySchema.MyPackage.getTestFunction(pParam1 VARCHAR2, pParam2 DATE) RETURN SYS_REFCURSOR AS
    result SYS_REFCURSOR; 
BEGIN
    OPEN result FOR
        SELECT 123 AS "ID", 'abc' AS "VALUE" FROM DUAL 
        UNION ALL
        SELECT 456 AS "ID", 'def' AS "VALUE" FROM DUAL 
        UNION ALL
        SELECT 789 AS "ID", 'ghi' AS "VALUE" FROM DUAL; 
    RETURN result; 
END getTestFunction;

我的 POJO

public class ResultPOJO {
    private String ID;
    private String VALUE;
}

我的仓库

@Transactional
@Repository
@SqlResultSetMapping(
    name = "testmapping",
    classes = {
            @ConstructorResult(
                    targetClass = ResultPOJO.class,
                    columns = {
                            @ColumnResult(name = "ID"),
                            @ColumnResult(name = "VALUE")
                    }
            )
    }
)
@NamedNativeQuery(
    name = "getTestFunction", 
    callable = true, 
    query = "{? = call mySchema.MyPackage.getTestFunction(?,?)}",
    resultSetMapping = "testmapping"
    )
public class TestDao {
    public List<ResultPOJO> getValues(String pParam1, LocalDate pParam2) {
        TypedQuery<ResultPOJO> q = entityManager.createNamedQuery("getTestFunction",ResultPOJO.class);
        q.setParameter(0, pParam1);
        q.setParameter(1, pParam2);     
        return q.getResultList();       
    }   
}

我错过了什么?

【问题讨论】:

    标签: java oracle spring-boot hibernate


    【解决方案1】:

    JPA 注释仅对实体有效,我也认为对 package-info.java 文件有效,但某些注释只能应用于类,因此您可能需要一种“虚拟实体”。你可以这样定义:

    @Entity
    @Subselect("select 1 as id from dual")
    public class Dual {
      @Id
      Integer id;
    }
    

    然后您可以在该类上定义@NamedNativeQuery。请注意,尽管您需要在 Spring 项目中启用实体扫描,但对于您将放入此类的包。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多