Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.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
Java Hibernate/JPA不检测位置参数_Java_Sql_Hibernate_Jpa - Fatal编程技术网

Java Hibernate/JPA不检测位置参数

Java Hibernate/JPA不检测位置参数,java,sql,hibernate,jpa,Java,Sql,Hibernate,Jpa,我使用本机查询,但Hibernate/JPA不起作用,它总是抛出 javax.ejb.EJBTransactionRolledbackException:带有 这一立场并不存在 原始SQL脚本:它在SQL编辑器中运行良好 Java实体类 服务电话呢 我不知道为什么NamedRequesty PollutantValueEntity.FIND_AVG_CONCENTRATION_BY_HOUR_IN_DAY的参数没有达到预期的效果 我错过什么了吗 编辑1: 因为EntityManager的crea

我使用本机查询,但Hibernate/JPA不起作用,它总是抛出

javax.ejb.EJBTransactionRolledbackException:带有 这一立场并不存在

原始SQL脚本:它在SQL编辑器中运行良好

Java实体类

服务电话呢

我不知道为什么NamedRequesty PollutantValueEntity.FIND_AVG_CONCENTRATION_BY_HOUR_IN_DAY的参数没有达到预期的效果

我错过什么了吗

编辑1:

因为EntityManager的createNativeQuery方法接受SQL查询字符串,但在实体类中,我用名称声明了它。 那么,如何在注释中保留此命名本机查询的名称呢

@命名设备

并从EntityManager em创建它,因为em没有像CreateNamedNativeRequesty这样的方法

请勿在?之后使用数字?。写?而不是?1


您的问题是您定义了一个命名查询,然后像这样调用它

Query query = em.createNativeQuery(PollutantValueEntity.FIND_AVG_CONCENTRATION_BY_HOUR_IN_DAY, PollutantValueEntity.AVG_POLLUTANT_VALUE_RESULT_MAPPER);
query.setParameter(1, "2017-06-27 11:00:00");
query.setParameter(2, "2017-06-28 11:00:00");
return query.getResultList();
query = em.createNamedQuery(PollutantValueEntity.FIND_AVG_CONCENTRATION_BY_HOUR_IN_DAY);
query.setParameter(1, "2017-06-27 11:00:00");
query.setParameter(2, "2017-06-28 11:00:00");
return query.getResultList();
这基本上是用SQL为PollutantValueEntity创建一个查询。按小时查找平均浓度 i、 e com.axonactive.iot.sniffer.entity.PollutantValueEntity.findAvgConcentrationByHourInDay,这不是SQL的明确定义。如果使用该方法,则直接将SQL传递给createNativeQuery方法

命名查询应该像这样实例化

Query query = em.createNativeQuery(PollutantValueEntity.FIND_AVG_CONCENTRATION_BY_HOUR_IN_DAY, PollutantValueEntity.AVG_POLLUTANT_VALUE_RESULT_MAPPER);
query.setParameter(1, "2017-06-27 11:00:00");
query.setParameter(2, "2017-06-28 11:00:00");
return query.getResultList();
query = em.createNamedQuery(PollutantValueEntity.FIND_AVG_CONCENTRATION_BY_HOUR_IN_DAY);
query.setParameter(1, "2017-06-27 11:00:00");
query.setParameter(2, "2017-06-28 11:00:00");
return query.getResultList();

然后您应该能够在它上面设置参数,因为它具有要调用的实际SQL

@ohgodspider不,不是。请注意,您的查询是以错误的方式编写的。因为您经常使用eclipse格式,所以在查询行的末尾缺少很多空白字符。此外,请尝试坚持使用命名参数,并查看错误是否仍然存在。实际上,JPA规范使用位置参数和命名参数,因此使用JDBC样式并不严格有效。至少它在EclipseLink 2.5.0中有效。试一试。。。。请注意,您的代码是不可移植的。你的HIbernate文档链接不适用于JPA,但问题是isI是否同意。但是,如果查询可能永远不会被另一个JPA实现超越,那也没关系。
Query query = sess.createSQLQuery("SELECT * FROM CATS WHERE NAME like ?").addEntity(Cat.class);
List pusList = query.setString(0, "Pus%").list();
Query query = em.createNativeQuery(PollutantValueEntity.FIND_AVG_CONCENTRATION_BY_HOUR_IN_DAY, PollutantValueEntity.AVG_POLLUTANT_VALUE_RESULT_MAPPER);
query.setParameter(1, "2017-06-27 11:00:00");
query.setParameter(2, "2017-06-28 11:00:00");
return query.getResultList();
query = em.createNamedQuery(PollutantValueEntity.FIND_AVG_CONCENTRATION_BY_HOUR_IN_DAY);
query.setParameter(1, "2017-06-27 11:00:00");
query.setParameter(2, "2017-06-28 11:00:00");
return query.getResultList();