当我提交登录表单时,我被重定向到始终是一个错误页面。
检查以下内容:
的hibernate.cfg.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="hibernate.connection.url">jdbc:oracle:thin:@127.0.0.1:1521:XE</property>
<property name="hibernate.connection.username">test</property>
<property name="hibernate.connection.password">abc123</property>
<property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>
<property name="hibernate.default_schema">bmmblr</property>
<property name="show_sql">true</property>
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
<!-- Drop and recreate the database schema on startup -->
<property name="hbm2ddl.auto">update</property>
<property name="hibernate.cache.use_query_cache">false</property>
<property name="hibernate.cache.use_second_level_cache">false</property>
<!-- classes annotated @Entity -->
<mapping class="com.bmm.inventory.bean.User"/>
</session-factory>
</hibernate-configuration>
UserDAOImpl.java
public int getUserbyCredentials(String userName, String passWord) {
//User user = new User();
System.out.println("Form values:"+userName+" "+passWord);
Session session = getSessionFactory().openSession();
Transaction tx = session.beginTransaction();
System.out.println("Query Params:"+userName+" "+passWord);
Query query = session.createQuery(
"select u.userName,u.passWord from User u where u.userName=:userName and u.passWord=:passWord");
query.setString("userName", userName);
query.setString("passWord", passWord);
@SuppressWarnings("unchecked")
List<User> list =(List<User>) query.list();
System.out.println("Result:"+list+" "+list.size());
session.getTransaction().commit();
session.close();
return list.size();
}
行动类:
public String execute() throws Exception {
System.out.println("Entering execute method of Login Action"+this.getUserName()+" "+this.getPassWord());
SessionFactory sf = (SessionFactory) ctx.getAttribute("SessionFactory");
UserDAO userDAO = new UserDAOImpl(sf);
int userDB = userDAO.getUserbyCredentials(this.getUserName(), this.getPassWord());
System.out.println("User Obj: "+userDB);
if(userDB < 1)
return "ERROR";
else {
return "SUCCESS";
}
}
当我输入正确的凭据时,下面是在控制台中打印的输出。
Form values : test abc123
Hibernate: select user0_.user_usa_name as col_0_0_, user0_.user_password as col_1_0_ from bmmblr.USERS user0_ where user0_.user_usa_name=? and user0_.user_password=?
Count : 0
Bean类:
package com.bmm.inventory.bean;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
@Entity
@Table (name="USERS")
public class User {
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;
}
public String getLocation() {
return location;
}
public void setLocation(String location) {
this.location = location;
}
public Date getCreatedDate() {
return createdDate;
}
public void setCreatedDate(Date createdDate) {
this.createdDate = createdDate;
}
public String getUserStatusCode() {
return userStatusCode;
}
public void setUserStatusCode(String userStatusCode) {
this.userStatusCode = userStatusCode;
}
public Long getID() {
return ID;
}
public void setID(Long iD) {
ID = iD;
}
@Id
@Column(name="user_id")
@SequenceGenerator(name="userIdSeq", sequenceName="user_id_seq")
@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="userIdSeq")
private Long ID;
@Column(name="user_usa_name")
private String userName;
@Column(name="user_password")
private String passWord;
@Column(name="user_location")
private String location;
@Column(name="user_created_dt")
private Date createdDate;
@Column(name="user_status_cd")
private String userStatusCode;
}
答案 0 :(得分:0)
我很惊讶您在这里没有收到错误,因为您在查询中使用投影但期望用户实体列表:
Query query = session.createQuery(
"select u.userName,u.passWord from User u where u.userName=:userName and u.passWord=:passWord");
query.setString("userName", userName);
query.setString("passWord", passWord);
@SuppressWarnings("unchecked")
List<User> list =(List<User>) query.list();
解决方案1
在查询中选择整个用户实体:
Query query = session.createQuery(
"select u from User u where u.userName=:userName and u.passWord=:passWord");
query.setString("userName", userName);
query.setString("passWord", passWord);
解决方案2
Expect List of Object []然后逐个提取用户名和密码:
Query query = session.createQuery(
"select u.userName,u.passWord from User u where u.userName=:userName and u.passWord=:passWord");
query.setString("userName", userName);
query.setString("passWord", passWord);
@SuppressWarnings("unchecked")
List<Object[]> list =(List<Object[]>) query.list();
Object firstRow = list[0];
userName = (String)firstRow [0];
passwd = (String)firstRow [1];
}
答案 1 :(得分:0)
最后,我可以在不使用符号设置参数的情况下实现此目的。我使用+符号来构建有效的查询。
// something like below
Query query = session.createQuery(
"select * from User u where u.userName="+this.userName+"and u.passWord="+this.passWord");