gpt4 book ai didi

java - 无法找到命名参数 Hibernate

转载 作者:行者123 更新时间:2023-12-02 02:45:29 26 4
gpt4 key购买 nike

这是我的 dao 方法,我尝试从数据库获取用户详细信息:

public UserInfo findUserInfo(String userName) {
String sql = "Select new " + UserInfo.class.getName() + "(u.username,u.password) "//
+ " from " + User.class.getName() + " u where u.username = :username ";

Session session = sessionFactory.getCurrentSession();

Query query = session.createQuery(sql);
query.setParameter("username", userName);

return (UserInfo) query.uniqueResult();
}

当我尝试执行它时,我收到此错误:

Caused by: org.hibernate.QueryParameterException: could not locate named parameter [username]
at org.hibernate.engine.query.spi.ParameterMetadata.getNamedParameterDescriptor(ParameterMetadata.java:148)
at org.hibernate.engine.query.spi.ParameterMetadata.getNamedParameterExpectedType(ParameterMetadata.java:165)
at org.hibernate.internal.AbstractQueryImpl.determineType(AbstractQueryImpl.java:523)
at org.hibernate.internal.AbstractQueryImpl.setParameter(AbstractQueryImpl.java:493)
at org.spajic.stefan.springhibernatesecurity.dao.UserInfoDAO.findUserInfo(UserInfoDAO.java:33)
at org.spajic.stefan.springhibernatesecurity.dao.UserInfoDAO$$FastClassBySpringCGLIB$$c14aad39.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:717)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99)
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:281)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:653)
at org.spajic.stefan.springhibernatesecurity.dao.UserInfoDAO$$EnhancerBySpringCGLIB$$3fdca957.findUserInfo(<generated>)
at org.spajic.stefan.springhibernatesecurity.authentication.MyUserDetailsService.loadUserByUsername(MyUserDetailsService.java:25)
at org.springframework.security.authentication.dao.DaoAuthenticationProvider.retrieveUser(DaoAuthenticationProvider.java:114)
... 36 more

这里还有 User 类和 UserInfo 类。 User 是 hibernate 实体,UserInfo 是我使用的模型。

@Entity
@Table(name = "Users")
public class User {

private String username;
private String password;
private boolean enabled;

@Id
@Column(name = "username", length = 36, nullable = false)
public String getUsername() {
return username;
}

public void setUsername(String username) {
this.username = username;
}

@Column(name = "password", nullable = false)
public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}

@Column(name = "enabled", nullable = false)
public boolean isEnabled() {
return enabled;
}

public void setEnabled(boolean enabled) {
this.enabled = enabled;
}

}

public class UserInfo {

private String userName;
private String password;

public UserInfo() {

}

// Do not change this constructor, it used in hibernate Query.
public UserInfo(String userName, String password) {
this.userName = userName;
this.password = password;
}

public String getUserName() {
return userName;
}

public void setUserName(String userName) {
this.userName = userName;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}

}

有什么帮助吗?

最佳答案

看起来该属性在您的 POJO 中名为 UserInfo:userName 并且您正在尝试使用用户名

我的意思是你使用的是小写的“n”而不是大写的“N”

关于java - 无法找到命名参数 Hibernate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44627769/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com