我試圖用數據庫用戶名進行認證。到目前爲止,錯誤是:Hibernate異常 - hibernate.internal.QueryImpl無法轉換
Your login attempt was not successful, try again.
Reason: org.hibernate.internal.QueryImpl cannot be cast to com.**.**.model.UserEntity
在DAO類查詢
@Repository
public class UserEntityDAOImpl implements UserEntityDAO{
@Autowired
private SessionFactory sessionFactory;
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
public Session getCurrentSession() {
return this.sessionFactory.getCurrentSession();
}
@Override
public UserEntity getUserByName(String username) {
// TODO Auto-generated method stub
UserEntity userEntity = (UserEntity)
sessionFactory.getCurrentSession().createQuery(
"select u from UserEntity u where u.username = '' + username + ''");
return userEntity;
}
服務
@Service("customUserDetailsService")
public class CustomUserDetailsService implements UserDetailsService{
@Autowired
private UserEntityDAO userEntityDAO;
@Autowired
private Assembler assembler;
@Override
@Transactional(readOnly = true)
public UserDetails loadUserByUsername(String username)
throws UsernameNotFoundException {
// TODO Auto-generated method stub
UserDetails userDetails = null;
UserEntity userEntity = userEntityDAO.getUserByName(username);
if (userEntity == null)
throw new UsernameNotFoundException("user not found");
return assembler.buildUserFromUser(userEntity);
}
}
保存用戶信息
DB表
/*Table structure for table `user` */
CREATE TABLE `user` (
`user_id` INT(11) NOT NULL AUTO_INCREMENT ,
`name` VARCHAR(45) NULL DEFAULT NULL ,
`password` VARCHAR(45) NOT NULL ,
`username` VARCHAR(45) NOT NULL ,
`active` TINYINT(1) NOT NULL ,
PRIMARY KEY (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1;
型號
@Entity
@Table(name = "user", schema = "")
@Component
public class UserEntity implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "user_id")
private Integer id;
@Column(name = "name")
private String name;
@Basic(optional = false)
@Column(name = "password")
private String password;
@Basic(optional = false)
@Column(name = "username")
private String username;
@Basic(optional = false)
@Column(name = "active")
private boolean active;
@JoinTable(name = "user_role", joinColumns = {
@JoinColumn(name = "user_id")}, inverseJoinColumns = {
@JoinColumn(name = "role_id")})
@OneToMany
private Set <Role> roles;
public UserEntity() {
}
//getters and setters
我想知道的是爲什麼查詢有問題,爲什麼用戶名不能從數據庫中檢索。
編輯:更改查詢後,登錄仍然不成功。登錄頁面被返回,除此之外,輸出控制檯中沒有錯誤消息:
Hibernate: select userentity0_.user_id as user1_1_, userentity0_.active as
active1_, userentity0_.name as name1_, userentity0_.password as password1_,
userentity0_.username as username1_ from user userentity0_ where
userentity0_.username=?
Hibernate: select roles0_.user_id as user1_1_1_, roles0_.role_id as role2_2_1_,
role1_.role_id as role1_0_0_, role1_.role as role0_0_ from user_role roles0_ inner
join role role1_ on roles0_.role_id=role1_.role_id where roles0_.user_id=?
INFO : com.**.**.controller.ApplicationController - This is the login page {}.
可怕的縮進......你能確保當你提問時你的代碼看起來很好嗎? – 2013-05-03 01:54:24
並嘗試隔離與問題相關的部分。粘貼服務代碼沒有意義。 – 2013-05-03 01:58:40
嗨我很抱歉亂碼顯示。我試圖修改它。 – user2259555 2013-05-03 02:09:51