java - 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;
此外,我尝试仅传递实体类名而没有整个位置仍然出错。请帮助解决这个问题。
解决方案
推荐阅读
- docker - 无法连接到 unix:///var/run/docker.sock 的 Docker 守护程序:在 debian 拉伸 armv7 中
- django - Docker Compose Up 正在运行,而使用相同的图像它没有运行图像?
- vb.net - 连接到访问数据库的winform应用程序中的app.config路径错误
- objective-c - 在守护程序应用程序中监听网络开/关状态 - Cocoa
- azure-active-directory - Azure AD 条件策略问题
- machine-learning - 使用 CNN conv1d 模型时的维度错误
- popup - 阻止阅读 Eigen 文档网页的弹出窗口
- android - Android Studio:我的消息未显示在我的 android 应用程序上
- angular - 如何在 Angular 中将数据传递给 viewContainerRef 组件?
- pandas - 如何根据DATAFRAME中的数字设置x轴