【问题标题】:Parameter does not exist as a named parameter even if well named即使命名良好,参数也不作为命名参数存在
【发布时间】:2016-09-26 13:36:04
【问题描述】:

我有一个我无法解决的问题。

Hibernate 显示:

Parameter targetDate does not exist as a named parameter in [delete from com.inetpsa.stb.model.Journal t where t.date < :targetDate]

targetDate 设置如下:

public int purgeOrSave(String hql, Date targetDate) {
        Query query = getSession().createQuery(hql);
        query.setDate("targetDate", targetDate);
        return query.executeUpdate();
}

hql 是一个包含要执行的查询的字符串:“delete from com.inetpsa.stb.model.Journal t where t.date

我的实体定义明确。我试图抑制实体的完全限定名称:

delete from Journal t where t.date < :targetDate

结果是休眠告诉我日志没有映射...

有什么想法吗?

PS : 这是日记的代码:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.inetpsa.stb.model" default-lazy="false">
   <class name="Journal" table="STBQTJEV">
        <id name="id" type="java.lang.Long" column="JEV_ID">
          <generator class="native">
           <param name="sequence">STBQXJEV</param>
          </generator>
        </id>
        <property name="uuid"           column="JEV_UUID"           type="java.lang.String"/>
        <property name="canal"          column="CAV_CODE"           type="java.lang.String"/>
        <property name="commandeId"     column="CMD_CODE"           type="java.lang.String"/>
        <property name="contratId"      column="CNT_CODE"           type="java.lang.String"/>
        <property name="contratClient"  column="CNT_CONTRAT_CLIENT" type="java.lang.String"/>
        <property name="vin"            column="VCL_VIN"            type="java.lang.String"/>
        <property name="clientCode"     column="CLT_CODE"           type="java.lang.String"/>
        <property name="clientMaile"    column="CLT_MAIL"           type="java.lang.String"/>
        <property name="evenementCode"  column="EVN_CODE"           type="java.lang.String"/>
        <property name="offer"          column="JEV_OFFER"          type="java.lang.String"/>
        <property name="produits"       column="JEV_PDT"            type="java.lang.String"/>        
        <property name="source"         column="JEV_SOURCE"         type="java.lang.String"/>
        <property name="step"           column="JEV_STEP"           type="java.lang.String"/>
        <property name="statut"         column="JEV_STATUT"         type="java.lang.String"/>
        <property name="commentaire"    column="JEV_COM"            type="java.lang.String"/>
        <property name="detail"         column="JEV_DETAIL"         type="java.lang.String"/>
        <property name="date"           column="JEV_DATE"           type="java.util.Date"/>       
        <property name="dateDebut"      column="JEV_DATE_DEBU"      type="java.sql.Timestamp"/>
        <property name="dateFin"        column="JEV_DATE_FIN"       type="java.sql.Timestamp"/>
   </class>
</hibernate-mapping>

【问题讨论】:

  • 能否提供 Journal 实体的代码?
  • 它是否适用于setParameter() 而不是setDate()
  • 初学者的查询字符串
  • 你试过吗:从日期
  • 定义public int purgeOrSave(String hql, Date targetDate)的类中Date的导入是什么? java.sql.Date 还是 java.util.Date?您的映射需要 java.util.Date,也许您的 IDE 导入了另一个。

标签: java hibernate hql


【解决方案1】:

致电我们的团队专家后,已找到解决方案。我们的应用程序管理 2 个不同的会话。该查询在错误的查询上被调用,这解释了 Journal “未映射”用于休眠。在对 dao 的调用者进行更正后,批处理可以正常工作。感谢大家的帮助。

【讨论】:

    【解决方案2】:

    使用

    query.setParameter("targetDate", targetDate)

    而不是

    query.setDate("targetDate", targetDate)`

    【讨论】:

    • 在 cmets 上,setParameter() 不起作用(与 setDate 相同的错误)。
    猜你喜欢
    • 2014-08-10
    • 1970-01-01
    • 1970-01-01
    • 2013-01-08
    • 2021-10-09
    • 2016-08-22
    • 2011-01-03
    • 2018-12-17
    • 2012-03-30
    相关资源
    最近更新 更多