2015-12-04 7 views
-1

Я новичок в Spring. Я столкнулся с проблемой ниже. Пожалуйста, помогите мне. это мой класс сущностей (с использованием Hibernate):Spring Hibernate Integration named query issue

package com.demo.model; 

import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.Id; 
import javax.persistence.Table; 

import org.hibernate.annotations.NamedQuery; 


@Entity 
@Table(name = "myuser") 
@NamedQuery(name="getPassword",query="SELECT login from Login login WHERE login.userName=:username") 
public class Login { 
    @Id 
    @GeneratedValue 
    @Column(name = "username") 
    private String userName; 

    @Column(name = "password") 
    private String 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; 
    } 
} 

это мой DAO.

package com.demo.dao; 

import java.util.ArrayList; 
import org.hibernate.Query; 
import org.hibernate.Session; 
import org.hibernate.SessionFactory; 
import org.hibernate.Transaction; 

import com.demo.model.Login; 

public class LoginDAO { 

    private SessionFactory sessionFactory; 

    public void setSessionFactory(SessionFactory sessionFactory){ 
     this.sessionFactory = sessionFactory; 
    } 
    public boolean validateLogin(Login login){ 
     System.out.println("login object"); 
     String userName = login.getUserName(); 
     String password = login.getPassword(); 

     System.out.println("user name is" + userName); 
     Session session = sessionFactory.openSession(); 
     Transaction tx = session.beginTransaction(); 

     Query query1 = session.getNamedQuery("getPassword"); 
     query1.setString("username", userName); 

     ArrayList<Login> loginList = (ArrayList)query1.list(); 
     System.out.println("list is" + loginList); 

     String pwdfrmdb = null; 
     for(Login l:loginList){ 
      System.out.println("Inside loop"); 
      pwdfrmdb = l.getPassword(); 
     } 
     System.out.println("password from database" + pwdfrmdb + "password entered" + password); 
     if(password.equals(pwdfrmdb)){ 
      return true; 
     } 
     return false; 
    } 
} 

this is my configuration. 

     <context:component-scan base-package="com.demo"/> 
     <!-- Define Datasource --> 
     <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
      <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/> 
      <property name="url" value="jdbc:oracle:thin:@localhost:1521:xe"/> 
      <property name="username" value="xxx"/> 
      <property name="password" value="yyy"/> 
     </bean> 

     <!-- Define SessionFactory --> 
     <bean id="hibernateSessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
      <property name="dataSource" ref="dataSource"/> 
      <property name="hibernateProperties"> 
       <props> 
        <prop key="hibernate.dialect">org.hibernate.dialect.OracleDialect 
        </prop> 
        <prop key="hibernate.show_sql">true</prop> 
       </props> 
      </property> 
      <property name="annotatedClasses"> 
       <list> 
         <value>com.demo.model.Login</value> 
       </list> 
     </property> 
     </bean> 


     <bean id="logindao" class="com.demo.dao.LoginDAO"> 
      <property name="sessionFactory" ref="hibernateSessionFactory"/> 
     </bean> 

     <bean id="login" class="com.demo.model.Login"/> 

My DAO не может получить значение пароля. Несмотря на то, что я дал значение имени пользователя для именованного запроса, оно отображается как?. сообщите мне, где я сделал ошибку.

Это выход:

before validation 
login object 
user name is a 
Hibernate: select login0_.username as username1_0_, login0_.password as password2_0_ from myuser login0_ where login0_.username=? 
list is[] 
password from databasenullpassword enteredb 

ответ

0

Для именованных запросов, когда вы используете именованный параметр попробуйте установить параметр, как показано ниже:

Query query1 = session.getNamedQuery("getPassword"); 
query1.setParameter("username", userName); 

это должно помочь

+0

Он также не работает , @Vivek Singh – Monika

+0

Вы получаете какие-то исключения. –

+0

Не получается исключение. @Vivek Singh – Monika