首页 > 解决方案 > java.lang.IllegalArgumentException:参数不作为命名参数存在

问题描述

 try {
        LOG.debug("Entering readDb at {}", 
        System.currentTimeMillis());
        Session session = 
        transactionManager.getSessionFactory().getCurrentSession();
        Query query = null;
        ReturnTrackerEntity rtEntity = null;
        List<ReturnTrackerEntity> rtEntityList = null;

        query = session.createQuery("SELECT r FROM org.hx.api.returns.model.entity.ReturnTrackerEntity r WHERE r.hxinRefId = :hxinRefId AND r.rtnTyp = :rtnTyp AND r.rtnPrd = :rtnPrd"); 


        if (query != null) {
            query.setString("hxinRefId", key.gethxinRefId());
            query.setString("rtnTyp", key.getRtnTyp()); 
            query.setString("rtnPrd", key.getRtnPeriod());
            LOG.debug("Query Parameters are {} {} {}", key.gethxinRefId(), key.getRtnTyp(), key.getRtnPeriod());
            rtEntityList = query.list();
            if(rtEntityList != null && !rtEntityList.isEmpty()) {
                rtEntity = (ReturnTrackerEntity) query.list().get(0);         
           }
            LOG.debug("Data from readDb at :{}", rtEntity);
        }
        return rtEntity;

执行上述方法时,出现以下异常;

java.lang.IllegalArgumentException: Parameter hxinRefId does not exist as a named parameter in [SELECT r FROM org.hx.api.returns.model.entity.ReturnTrackerEntity r WHERE r.hxinRefId = :hxinRefId AND r.rtnTyp = :rtnTyp AND r.rtnPrd = :rtnPrd]

我尝试使用 setParameters 仍然显示错误:

org.hibernate.QueryParameterException: could not locate named parameter [hxinRefId]

这是 getter setter 后跟的实体类:

@Entity
@Table(name = "RTN_TRACKER")
@NamedQuery(
    name = "ReturnTrackerEntity.getReturnTracker",
    query = "SELECT r FROM org.hx.api.returns.model.entity.ReturnTrackerEntity r WHERE r.hxinRefId = :hxinRefId AND r.rtnTyp = :rtnTyp AND r.rtnPrd = :rtnPrd")
public class ReturnTrackerEntity implements Serializable {


private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "ID")
private int id;

@Column(name = "HXIN_REF_ID")
private String hxinRefId;   

@Column(name = "RTN_TYP")
private String rtnTyp;

@Column(name = "RTN_PRD")
private String rtnPrd;

@Temporal(TemporalType.TIMESTAMP)
@Column(name = "LATEST_SAVE_END")
private Date lastSaveEndTmpStmp;

@Temporal(TemporalType.TIMESTAMP)
@Column(name = "LATEST_START")
private Date lastStartTmpStmp;

@Temporal(TemporalType.TIMESTAMP)
@Column(name = "INSERT_TMSTMP")
private Date insertTmpStmp; 

@Temporal(TemporalType.TIMESTAMP)
@Column(name = "UPDATE_TMSTMP")
private Date updateTmpStmp;

@Column(name = "STATE_CD")
private String stateCd;

此外,我尝试仅传递实体类名而没有整个位置仍然出错。请帮助解决这个问题。

标签: javaparametersentityillegalargumentexceptionnamed-query

解决方案


推荐阅读