1. 用到了以下几个文件
①test.java , userinfo.java , hibernate.cfg.xml, userinfo.hbm.xml
②上面几个文件要都放在src目录下,当然是不是必须放在这个目录中我还不能确定
③我把jdbc包和hibernate包既放在了tomcat/common/lib下面了,也放在project/WEB-INF/classes/
下面,网上的资料说需要放在classes下面,否则会出现一些其他的问题,具体的我没测试过,但是我想
应该放在classes下面,否则我传到服务器上时包怎么办?但是有个问题是我用jdom时怎么可以?这
里还不太清楚.
④
2. 下面是从头到尾出现的错误,以及解决办法:
①org.hibernate.HibernateException: Dialect class not found: net.sf.hibernate.dialect.sqlserverdialect
这是因为我的断言是 net.sf.hibernate.dialect.SQLServerDialect, 而我的hibernate版本是第3版的,所以要
改成org.hibernate.dialect.SQLServerDialect.
② new Configuration().configure().buildSessionFactory() = Method threw 'java.lang.NoClassDefFoundError'
exception.后来为了更好的查错,我把这条语句分开成:
Configuration cfg=new Configuration().configure("/hibernate.cfg.xml");
SessionFactory sf=cfg.buildSessionFactory();
会报以下错误:cfg.buildSessionFactory() = Method threw 'java.lang.NoClassDefFoundError' exception
产生这个问题的是jta.jar包没有放进去的问题,据说是tomcat的版本问题,在tomcat5.0中没有这个包.
③e: org.hibernate.HibernateException =
{org.hibernate.PropertyNotFoundException@3238}"org.hibernate.PropertyNotFou
ndException: Could not find a getter for id in class userinfo"
e: org.hibernate.HibernateException =
{org.hibernate.PropertyNotFoundException@3307}"org.hibernate.PropertyNotFou
ndException: Could not find a getter for username in class userinfo"
这是因为userinfo.java中的get和set方法的格式问题产生的,所以得弄清楚怎么自动生成这些方法.
④ a. e: org.hibernate.HibernateException =
{org.hibernate.exception.JDBCConnectionException@3557}"org.hibernate.except
ion.JDBCConnectionException: Cannot open connection"
b. sqle: java.sql.SQLException =
{java.sql.SQLException@3559}"java.sql.SQLException: No suitable driver"
c. session.beginTransaction() = Method threw
'org.hibernate.exception.JDBCConnectionException' exception.
d. e: org.hibernate.HibernateException =
{org.hibernate.MappingException@2911}"org.hibernate.MappingException:
invalid configuration"
e. cause: java.lang.Throwable =
{org.xml.sax.SAXParseException@2916}"org.xml.sax.SAXParseException: The
content of element type /"hibernate-configuration/" must match /"(session-factory,security?)/"."
f. session.beginTransaction() = Method threw org.hibernate.exception.JDBCConnectionException'exception.
g. e: org.hibernate.HibernateException =
{org.hibernate.exception.JDBCConnectionException@3567}"org.hibernate.except
ion.JDBCConnectionException: Cannot open connection"
h. sqle: java.sql.SQLException =
{java.sql.SQLException@3569}"java.sql.SQLException: [Microsoft][SQLServer
2000 Driver for JDBC]Error establishing socket."
这些都是因为hibernate.cfg.xml中配置出现错误产生的问题,最主要的就是下面两个:
<property name="connection.driver_class">com.microsoft.jdbc.sqlserver.SQLServerDriver</property>
<property
name="connection.url">jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=testhibernate;SelectMethod=cursor
</property>
⑤tx.commit() = Method threw 'org.hibernate.exception.ConstraintViolationException' exception.
当 IDENTITY_INSERT 设置为 OFF 时,不能向表 'userinfo' 中的标识列插入显式值.
我将increment改为native就能够解决了,但是具体的generator还得去找资料研究一下.
3. 其他方面一些要注意的问题
①<mapping resource="userInfo/User.hbm.xml"/>这个resource指定的目录是相对于classes的
② 在最后还碰到了另一个问题,但是不影响结果
javax.naming.NamingException: Context is read only
网上资料说是:tomcat不支持jndi动态绑定的原因,不清楚.
可以参考这个页面(http://topic.csdn.net/t/20050222/09/3796914.html)
4. 还有好多好多问题在后面,又没书看,又没钱买,哎,叫我怎么活........