本人是从php进行web编程,转换为java编程。想学习一下hibernate的使用。大多数应用hibernate,都是用IDE工具来开发。我想就用简单的cmd来完成,但发现了用并不顺畅。做了一个简单的测试来,在编译Test类。[code]package chen.hibernate;
import chen.hibernate.User;
//import org.hibernate.*;
import org.hibernate.cfg.*;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.HibernateException;
import org.hibernate.cfg.Configuration;
public class Test {
public static void main(String[] args) {
try
{
SessionFactory sf = new Configuration().configure().bulidSessionFactory();
Session session = sf.openSession();
Transaction tx = session.beginTransaction();
for (int i=0;i<3000;i++)
{
User user = new User();
user.setUsername("hibernate");
user.setPassword("123");
session.save(user);
}
tx.commit();
session.close();
System.out.println("ok");
}
catch (HibernateException e)
{
e.printStackTrace();
}
}
}[/code]
的时候,总是出错。老是提示找不到符号。
[code] 方法 bulidSessionFactory()
位置: 类 org.hibernate.cfg.Configuration
SessionFactory sf =
dSessionFactory();
Test.java:19: 找不到符号
符号: 类 Transation
位置: 类 chen.hibernate.Test
Transation tx = sess
^
Test.java:34: 找不到符号
符号: 类 HibernateException
位置: 类 chen.hibernate.Test
catch (HibernateException e)
[/code]
buildSessionFactory()找不到类。初步估计是因为hibernate的包没有引用进来。
决定用google来查一下,看有没有有用的帮助。
关键词为hibernate+找不到符号符号:
花了整整一个下午,没找到原因。头好痛。
半小时后,发现一个字符错误。应Transaction。还剩两个错误
引入一个import org.hibernate.HibernateException后,错误减少为一个。
用javac -verbose chen/hibernate/Test.java后发现这些包都已经导入。
[code]Test.java:16: 找不到符号
符号: 方法bulidSessionFactory()
位置: 类 org.hibernate.cfg.Configuration
SessionFactory sf = new Configuration().confi
^
gure().bulidSessionFactory();[/code]
初步原因分析:
SessionFactory sf = new Configuration().configure().bulidSessionFactory()找不到符号,可能因为configuration没引入,没有配置对?
Configuration是hibernate的入口.
三个小时后:
[code] Configuration config = new Configuration().configure();
SessionFactory sessionFactory = config.buildSessionFactory();
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();[/code]
终于编译能过。
但新问题又出现了:
Error parsing XML: XML InputStream
加上
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
解决了这一问题。但
新的问题又出现了
[code]log4j:WARN No appenders could be find for logger
log4j:WARN please initialize the log4j system properly[/code]
解决此问题,在hibernate.cfg.xml旁加log4j.properties配置文件。
运行时会出现:很多详细信息。
又出一问题:
[code]
Exception in thread "main" java.lang.NoClassDefFoundError: net/sf/ehcache/CacheException
at java.lang.Class.getDeclaredConstructors0(Native Method)
[/code]
第二天中午查原因:
到这一步原因已经明显,hibernate2.0与3.0的包不同
在google的途中,看到了这样一句话:
[code]多看文档,多思考,自己解决问题。
多写代码,多锻炼,程序不费力气。[/code]
还有点道理,有问题,一定要自己解决。
[code]
NoClassDefFoundError: org/objectweb/asm/Type
[/code]
下一个问题:
[code]
Exception in thread "main" java.lang.NoClassDefFoundError: javax/transaction/Synchronization[/code]
导入asm.jar,asm-attrs.jar,jta.jar,ehcache-1.2.3.jar,log4j-1.2.11.jar
就解决了以上问题。
终于成功了。
总结;
1)将hibernate必要的包放到classpath中。
2)将hibernate.cfg.xml放至classes下。
3)User.hbm.xml与User.class放到同一包中。
4)log4j.properties一定要添加,可以看到很多详细信息
5)解决中文乱码,采用?useUnicode=true&characterEncoding=UTF-8
import chen.hibernate.User;
//import org.hibernate.*;
import org.hibernate.cfg.*;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.HibernateException;
import org.hibernate.cfg.Configuration;
public class Test {
public static void main(String[] args) {
try
{
SessionFactory sf = new Configuration().configure().bulidSessionFactory();
Session session = sf.openSession();
Transaction tx = session.beginTransaction();
for (int i=0;i<3000;i++)
{
User user = new User();
user.setUsername("hibernate");
user.setPassword("123");
session.save(user);
}
tx.commit();
session.close();
System.out.println("ok");
}
catch (HibernateException e)
{
e.printStackTrace();
}
}
}[/code]
的时候,总是出错。老是提示找不到符号。
[code] 方法 bulidSessionFactory()
位置: 类 org.hibernate.cfg.Configuration
SessionFactory sf =
dSessionFactory();
Test.java:19: 找不到符号
符号: 类 Transation
位置: 类 chen.hibernate.Test
Transation tx = sess
^
Test.java:34: 找不到符号
符号: 类 HibernateException
位置: 类 chen.hibernate.Test
catch (HibernateException e)
[/code]
buildSessionFactory()找不到类。初步估计是因为hibernate的包没有引用进来。
决定用google来查一下,看有没有有用的帮助。
关键词为hibernate+找不到符号符号:
花了整整一个下午,没找到原因。头好痛。
半小时后,发现一个字符错误。应Transaction。还剩两个错误
引入一个import org.hibernate.HibernateException后,错误减少为一个。
用javac -verbose chen/hibernate/Test.java后发现这些包都已经导入。
[code]Test.java:16: 找不到符号
符号: 方法bulidSessionFactory()
位置: 类 org.hibernate.cfg.Configuration
SessionFactory sf = new Configuration().confi
^
gure().bulidSessionFactory();[/code]
初步原因分析:
SessionFactory sf = new Configuration().configure().bulidSessionFactory()找不到符号,可能因为configuration没引入,没有配置对?
Configuration是hibernate的入口.
三个小时后:
[code] Configuration config = new Configuration().configure();
SessionFactory sessionFactory = config.buildSessionFactory();
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();[/code]
终于编译能过。
但新问题又出现了:
Error parsing XML: XML InputStream
加上
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
解决了这一问题。但
新的问题又出现了
[code]log4j:WARN No appenders could be find for logger
log4j:WARN please initialize the log4j system properly[/code]
解决此问题,在hibernate.cfg.xml旁加log4j.properties配置文件。
运行时会出现:很多详细信息。
又出一问题:
[code]
Exception in thread "main" java.lang.NoClassDefFoundError: net/sf/ehcache/CacheException
at java.lang.Class.getDeclaredConstructors0(Native Method)
[/code]
第二天中午查原因:
到这一步原因已经明显,hibernate2.0与3.0的包不同
在google的途中,看到了这样一句话:
[code]多看文档,多思考,自己解决问题。
多写代码,多锻炼,程序不费力气。[/code]
还有点道理,有问题,一定要自己解决。
[code]
NoClassDefFoundError: org/objectweb/asm/Type
[/code]
下一个问题:
[code]
Exception in thread "main" java.lang.NoClassDefFoundError: javax/transaction/Synchronization[/code]
导入asm.jar,asm-attrs.jar,jta.jar,ehcache-1.2.3.jar,log4j-1.2.11.jar
就解决了以上问题。
终于成功了。
总结;
1)将hibernate必要的包放到classpath中。
2)将hibernate.cfg.xml放至classes下。
3)User.hbm.xml与User.class放到同一包中。
4)log4j.properties一定要添加,可以看到很多详细信息
5)解决中文乱码,采用?useUnicode=true&characterEncoding=UTF-8