2013-05-02 95 views
0

我試圖用數據庫用戶名進行認證。到目前爲止,錯誤是: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 {}. 
+0

可怕的縮進......你能確保當你提問時你的代碼看起來很好嗎? – 2013-05-03 01:54:24

+0

並嘗試隔離與問題相關的部分。粘貼服務代碼沒有意義。 – 2013-05-03 01:58:40

+0

嗨我很抱歉亂碼顯示。我試圖修改它。 – user2259555 2013-05-03 02:09:51

回答

0

您忘記執行您創建的查詢。它應該是:

sessionFactory.getCurrentSession().createQuery(...).uniqueResult(); 

此外,請使用適當的綁定變量。因爲它代表你的查詢是假的單引號,我不知道,如果你犯了一個錯字將其粘貼到計算器,但這樣的事情會更安全:

sessionFactory 
    .getCurrentSession() 
    .createQuery("select u from UserEntity u where u.username = :username") 
    .setParameter("username", username) 
    .uniqueResult(); 
+0

是的,我省略了添加.uniqueResult。我現在已經更改了查詢,但是現在當我輸入用戶詳細信息時,除了在堆棧跟蹤中顯示的HQL查詢外,沒有任何事情發生。我錯過了什麼嗎? – user2259555 2013-05-03 01:23:42

+0

查詢不顯示堆棧跟蹤。有一個異常會導致顯示堆棧跟蹤。您應該提供例外信息 – 2013-05-03 01:56:18

+0

嗨,感謝您的回覆。輸出或頁面中沒有異常信息。登錄頁面仍在屏幕上,HQL選擇查詢顯示在控制檯中。我已經添加到我的第一篇文章。 – user2259555 2013-05-03 02:09:14

相關問題