第一次使用Hibernate,果真还是有错误,来个人帮我看看问题所在

holyten 2006-01-18 07:03:06
【错误提示】
javax.servlet.ServletException: No data type for node: org.hibernate.hql.ast.IdentNode
+-[IDENT] IdentNode: 'user_name' {originalText=user_name}

org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:545)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:486)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

【Staff.java】
package com.pingan.pccw.hibernate.object;

public class Staff {
private String username=null;
private String ctiusername=null;
private String ctipassword=null;
private String maxiusername=null;
private String maxipassword=null;
private String role=null;
private String userid=null;
private String extension=null;

public Staff(){
}

public void setExtension(String extension){
this.extension=extension;
}
public void setUsername(String username){
this.username=username;
}
public void setCtiusername(String ctiusername){
this.ctiusername=ctiusername;
}
public void setCtipassword(String ctipassword){
this.ctipassword=ctipassword;
}
public void setMaxiusername(String maxiusername){
this.maxiusername=maxiusername;
}
public void setMaxipassword(String maxipassword){
this.maxipassword=maxipassword;
}
public void setRole(String role){
this.role=role;
}
public void setUserid(String userid){
this.userid=userid;
}
public String getUsername(){
return this.username;
}
public String getCtiusername(){
return this.ctiusername;
}
public String getCtipassword(){
return this.ctipassword;
}
public String getMaxiusername(){
return this.maxiusername;
}
public String getMaxipassword(){
return this.maxipassword;
}
public String getRole(){
return this.role;
}
public String getUserid(){
return this.userid;
}
public String getExtension(){
return this.extension;
}
}

【Staff.hbm.xml】
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">

<hibernate-mapping>
<class name="com.pingan.pccw.hibernate.object.Staff" table="PA_CSE">
<id name="userid" type="string" unsaved-value="null">
<column name="user_id" sql-type="varchar(20)" not-null="true"/>
<generator class="uuid.hex"/>
</id>
<property name="username">
<column name="user_name" sql-type="nvarchar(50)" not-null="false"/>
</property>
<property name="ctiusername">
<column name="user_skp_id" sql-type="varchar(10)" not-null="false"/>
</property>
<property name="ctipassword">
<column name="user_skp_pwd" sql-type="varchar(10)" not-null="false"/>
</property>
<property name="role">
<column name="user_type" sql-type="varchar(2)" not-null="false"/>
</property>
</class>
</hibernate-mapping>

【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">

<!-- Generated by MyEclipse Hibernate Tools. -->
<hibernate-configuration>

<session-factory>
<property name="myeclipse.connection.profile">PingAn</property>
<property name="connection.url">jdbc:jtds:sqlserver://192.168.62.13:1433/PingAn</property>
<property name="connection.username">sa</property>
<property name="connection.password">sa</property>
<property name="connection.driver_class">net.sourceforge.jtds.jdbc.Driver</property>
<property name="dialect">org.hibernate.dialect.SQLServerDialect</property>
<property name="show_sql">true</property>
<mapping resource="/Staff.hbm.xml"></mapping>
</session-factory>

</hibernate-configuration>

【LoginValidate】
package com.pingan.pccw.business;

import javax.sql.DataSource;
import org.hibernate.*;
import com.pingan.pccw.hibernate.*;
import com.pingan.pccw.hibernate.object.Staff;

import java.util.Iterator;

public class LoginValidate {
private DataSource dataSource;

public void setDataSource(DataSource dataSource){
this.dataSource=dataSource;
}

public DataSource getDataSource(){
return this.dataSource;
}

public boolean isValidate(String userid,String password,String extension,boolean bind){
Session session = HibernateUtil.currentSession();
Transaction tx= session.beginTransaction();
Query query=session.createQuery("SELECT user_name,user_type,user_skp_id,user_skp_pwd,extension FROM PA_CSE WHERE user_id=:user_id AND user_pwd =:user_pwd");
query.setString("user_id",userid);
query.setString("user_pwd",password);
Iterator it=query.iterate();
if (it.hasNext()) {
Staff staff=(Staff)it.next();
System.out.print("username:"+staff.getUsername()+";ctiusername:"+staff.getCtiusername()+";ctipassword:"+staff.getCtipassword()+";extension:"+staff.getExtension()+";role:"+staff.getRole());
tx.commit();
HibernateUtil.closeSession();
return true;
}
else{
tx.commit();
HibernateUtil.closeSession();
return false;
}
}

}

【数据表结构】
Field Type null
==================================================
user_id varchar(20) not null (primary key)
user_pwd varchar(20)
user_name nvarchar(50)
user_type varchar(2)
user_skp_id varchar(10)
user_skp_pwd varchar(10)
extension varchar(50)
...全文
181 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Saro 2006-01-20
  • 打赏
  • 举报
回复
不要写sqltype,这样写试试:
<property name="username">
<column name="user_name" type="string" not-null="false"/>
</property>
holyten 2006-01-20
  • 打赏
  • 举报
回复
由于数据库已经定下来了,并且不可修改类型,所以只能用这样的数据表类型。别的工具我从来没有用过,也不知道怎么用,我还是比较喜欢全部自己控制的方法。
holyten 2006-01-20
  • 打赏
  • 举报
回复
修改成上面的方法后,还是同样的错误!! 来人帮忙仔细看看吧!
holyten 2006-01-20
  • 打赏
  • 举报
回复
这个问题我也考虑过了,但是把NVARCHAR改成VARCHAR一样还是同样的问题。所以不是这个引起的。
holyten 2006-01-20
  • 打赏
  • 举报
回复
对不起大家了,问题我找到了,其实不是你们说的,问题是出现在我的 query里面
里面用的字段名字和表名字都应该使用映射后的名字!但是还是要感谢些大家!
TinyJimmy 2006-01-19
  • 打赏
  • 举报
回复
大概是nvarchar(50) 的问题, 没准hibernate不支持呢
grapepaul 2006-01-19
  • 打赏
  • 举报
回复
nvarchar是sqlserver自己的类型?
查查有问题没?
Little_qd 2006-01-19
  • 打赏
  • 举报
回复
nvarchar(50)的问题
尝试一下二楼的方法
Octer 2006-01-18
  • 打赏
  • 举报
回复
我通常是先写POJO然后,然后通过Xdoclet生成HBM,在根据HBM生成数据库表结构
Octer 2006-01-18
  • 打赏
  • 举报
回复
建议你的hbm中的属性这样写还是比较好
<property
name="name"
type="java.lang.String"
column="name"
length="30"
not-null="false"
/>
生成数据库表结构你可以用SchemExport
这样,会针对不同数据库生成相应类型
不过你的nvarchar类型用的怪怪的,呵呵
funcreal 2006-01-18
  • 打赏
  • 举报
回复
就扫了一下,是不是nvarchar的问题?为什么username和别的类型不同?

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧