初学Hibernate的几个问题
本来在tomcat下作了一个测试hibernate的例子,但是测试一直有错
后来就自己做了一个单独类测试来测试hibernate
问题1:我们知道 .jar .war .ear组成的应用程序在j2ee服务器上(包括tomcat)部署的时候会自动装载web-inf\lib下的资源包, 就拿hibernate例子来说,要运行hibernate就必须把所有hibernate必须的jar包拷贝到lib目录里, 那么当程序脱离j2ee服务器的时候,要运行Hibernate是不是必须把这些需要的jar文件添加到系统的CLASSPATH里,或者自己修改类装载器来装载需要的包(这个是应该能实现吧)
问题2:就是我们例子中遇到的问题
数据库使用的是sqlserver2000
目录组织是:
hibernate.cfg.xml
test\---student.class
---student_hbm.xml
---testStudent.class
hibernate.cfg.xml内容如下
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.dialect">net.sf.hibernate.dialect.SQLServerDialect</property>
<property name="hibernate.connection.driver_class">sun.jdbc.odbc.JdbcOdbcDriver</property>
<property name="hibernate.connection.url">jdbc:odbc:school</property>
<property name="hibernate.connection.username">java</property>
<property name="hibernate.connection.password">12345678</property>
<property name="hibernate.connection.pool.size">0</property>
<mapping resource="test/Student_hbm.xml"/>
</session-factory>
</hibernate-configuration>
student_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="test.Student" table="student">
<id name="userid" type="java.lang.String" column="userid" >
<generatorclass="net.sf.hibernate.id.TableHiLoGenerator" />
</id>
<property name="username" />
</class>
</hibernate-mapping>
student.java内容如下
package test;
import java.util.*;
import java.sql.*;
import net.sf.hibernate.*;
import net.sf.hibernate.cfg.*;
public class Student {
private String userid = "";
private String username = "";
public void setUserid(String userid) {
this.userid = userid;
}
public String getUserid() {
return userid;
}
public void setUsername(String username) {
this.username = username;
}
public String getUsername() {
return username;
}
public boolean selectHBM() throws Exception {
Session session = HibernateUtil.currentSession();
try {
String queryString = "select test.Student from test.Student as stu where stu.userid='"+userid+"'";
Query query = session.createQuery(queryString);
Iterator it = query.iterate();
if(it.hasNext()){
Student stu=(Student)it.next();
username = stu.getUsername();
return true;
}else{
return false;
}
} catch (Exception he) {
throw new Exception(he);
} finally {
HibernateUtil.closeSession();
}
}
}
HibernateUtil.java类为:
package test;
import java.io.InputStream;
import java.util.Properties;
import net.sf.hibernate.*;
import net.sf.hibernate.cfg.*;
public class HibernateUtil {
private static final SessionFactory sessionFactory;
static {
try {
sessionFactory = new Configuration().configure().buildSessionFactory();
} catch (HibernateException ex) {
throw new RuntimeException("Exception building SessionFactory: " + ex.getMessage(), ex);
}
}
public static final ThreadLocal session = new ThreadLocal();
public static Session currentSession() throws HibernateException {
Session s = (Session) session.get();
if (s == null) {
s = sessionFactory.openSession();
session.set(s);
}
return s;
}
public static void closeSession() throws HibernateException {
Session s = (Session) session.get();
session.set(null);
if (s != null)
s.close();
}
}
package test;
public class testStudent {
public static void main(String args[]){
Student student=new Student();
student.setUserid("test1");
student.setUsername("wangzn");
try{
boolean isValid=student.selectHBM();
System.out.println(""+isValid);
}catch(Exception e){System.out.println(e);}
}
}
运行testStudent
C:\testHib\classes>java school.testStudent
2004-12-28 11:23:14 net.sf.hibernate.cfg.Environment <clinit>
信息: Hibernate 2.1 beta 1
2004-12-28 11:23:14 net.sf.hibernate.cfg.Environment <clinit>
信息: hibernate.properties not found
2004-12-28 11:23:14 net.sf.hibernate.cfg.Environment <clinit>
信息: using CGLIB reflection optimizer
2004-12-28 11:23:14 net.sf.hibernate.cfg.Environment <clinit>
信息: JVM proxy support: true
2004-12-28 11:23:14 net.sf.hibernate.cfg.Configuration getConfigurationInputStre
am
信息: Configuration resource: /hibernate.cfg.xml
2004-12-28 11:23:15 net.sf.hibernate.util.XMLHelper$ErrorLogger error
服务器: Error parsing XML: /hibernate.cfg.xml(1)
org.xml.sax.SAXParseException: 字符转换错误:“Malformed UTF-8 char -- is an XML
encoding declaration missing?”(行号可能太小)。
at org.apache.crimson.parser.InputEntity.fatal(InputEntity.java:1100)
at org.apache.crimson.parser.InputEntity.fillbuf(InputEntity.java:1072)
at org.apache.crimson.parser.InputEntity.isXmlDeclOrTextDeclPrefix(Input
Entity.java:914)
at org.apache.crimson.parser.Parser2.maybeXmlDecl(Parser2.java:1009)
at org.apache.crimson.parser.Parser2.parseInternal(Parser2.java:486)
at org.apache.crimson.parser.Parser2.parse(Parser2.java:305)
at org.apache.crimson.parser.XMLReaderImpl.parse(XMLReaderImpl.java:442)
at org.dom4j.io.SAXReader.read(SAXReader.java:339)
at net.sf.hibernate.cfg.Configuration.configure(Configuration.java:805)
at net.sf.hibernate.cfg.Configuration.configure(Configuration.java:752)
at net.sf.hibernate.cfg.Configuration.configure(Configuration.java:739)
at school.HibernateUtil.<clinit>(hibernateutil.java:26)
at school.test.selectHBM(student.java:262)
at school.testStudent.main(teststudent.java:32)
这是什么问题啊,解析xml出错,可是看不出错误啊