CriteriaBuilder调用select函数



我有一个查询,我想在不解析函数参数的情况下调用该函数。实例

CREATE OR REPLACE function demo_fn()
RETURNS TABLE (
    id bigint,
 somename varchar,
 something varchar) AS $$
BEGIN
    RETURN QUERY SELECT DISTINCT c.id, c.somename , c.something FROM pluto c
    ORDER BY id ASC LIMIT 10; 
END;
$$ 
LANGUAGE plpgsql;

这个查询函数的调用类似于select * from demo_fn();,它在数据库中运行得非常好。另一方面,调用函数的方法是这样的。。。。

CriteriaBuilder cb = em.getCriteriaBuilder();
cb.function("demo_fn", PlutoDTO.class, cb.parameter(null))));
CriteriaQuery cq = cb.createQuery(PlutoDTO.class);
Root root = cq.from(Pluto.class);
TypedQuery q = em.createQuery(cq);
List<PlutoDTO> pluto = q.getResultList();

当我运行函数时Caused by: java.lang.IllegalArgumentException: Error occurred validating the Criteria

有人能给我指正确的方向吗我真的看不见路了。。。。。非常感谢

所以用条件调用函数似乎有点有趣,所以我所做的是,我使用了一个准备好的语句。。。

Session session = entityManager.unwrap(Session.class); //Session from Hibernate
        session.doWork(new Work() {
            @Override
            public void execute(Connection connection) throws SQLException {
                PreparedStatement ps= connection.prepareStatement("select * from demo_fn()");
                ResultSet rs= ps.getResultSet();
                List<DemoDto> demoDtos = new ArrayList<>();
                while (rs.next()) {
                     DemoDto demoDto = new DemoDto();
                     demoDto.setDemoValueOne(rs.getString("Column_name_here"));
                     demoDtos.add(demoDto);
                       // Get the values from ResultSet in this case rs
                }
                //Have an impelementation Taking care of this
                //rs.close(); 
                //ps.close();
            }

希望这对未来的某个人有所帮助,这真的很痛苦。不过,分页时要小心,它确实很灵活。

相关内容

  • 没有找到相关文章

最新更新