CriteriaBuilder 调用一个 select 函数
CriteriaBuilder call a select function
我有一个查询,我想在不解析函数参数的情况下调用函数。
示例....
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();
}
希望这对以后的人有所帮助,这真的是一个痛苦的过程。
分页时要小心,它真的很灵活。
我有一个查询,我想在不解析函数参数的情况下调用函数。 示例....
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();
}
希望这对以后的人有所帮助,这真的是一个痛苦的过程。 分页时要小心,它真的很灵活。