Hibernate使用DAO无法插入数据(可追加50分)

来源:百度知道 编辑:UC知道 时间:2024/06/08 11:53:42
最近做毕设,使用Hibernate3.2,myeclipse7.0
实体类User(id,username,sex)数据库表user(id,username,sex)
他们之间已用Hibernate进行了映射,并且myeclipse7.0中自动生成了相应的DAO类。
之后我用DAO插入数据。代码如下:
UserDAO uDAO=new UserDAO();
User u=new User();
try
{
u.setUsername(username);
u.setSex(sex);
uDAO.save(u);
}
catch(HibernateException e)
{
e.printStackTrace();
}
catch(Exception e)
{
e.printStackTrace();
}
username和sex为表单提交的内容,在点击表单提交按钮后,能看到Console窗口中输出SQL语句,并且没有报错或异常,页面上能动态显示刚插入的数据(我做成这样的)。但是当我刷新页面时刚插入的数据都没有了,只有数据库中原有的数据显示出来。并且在我插入一个数据时,同时查询数据库时数据库查询处于等待状态,说明此时有程序在访问数据库,我吧tomcat停掉后,查询结果马上出来了,没有新插入的数据。
请问这是为什么呢?如何解决。
能解决的话追加最多50分。
我自己推测是事务没有提交或者session没有关闭之类的。后来我给他加上了事务,发现可以插入到数据库了。为什么呢?DAO不就是将所有操作都封装好了吗,还是自动生成的DAO有些什么缺陷吗?另外,log4j的日志文件如何自动生成?
两个问题都解决了的话,最多追加100分,优先解决前一个。

问题:
1、DAO直接save为何不行,非得加上事务且commit吗?(我修改后成功了,但为什么会这样?)
2、log4j文件如何——————自动——————生成? 它能自动生成吗?

看看映射文件,如果都没有问题,在检查一下dao对session的操作是否正确
很有可能自动生成的,需要修改,我本人都是手写,没用过自动生成的。hibernate中,除了查询可以不用事务外,其他都要用,而且要在session关闭前提交事务,否则就会不抱异常,但还不成功 如果再不行,就吧dao类给我看下

用log4j,必须写一个log4j.properties的文件

里边写配置信息
#log4j.rootLogger=DEBUG,A1,R
log4j.rootLogger=INFO,A1
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=[ztf] %d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c] [%p] - %m%n

#log4j.appender.R=org.apache.log4j.RollingFileAppender
#log4j.appender.R.File=/home/www/tomcat/webapps/bbs/WEB-INF/bbscs_sys_log.txt
#log4j.appender.R.MaxFileSize=500KB
#log4j.appender.R.MaxBackupIndex=1
#log4j.appender.R.layout=org.apache.log4j.PatternLayout
#log4j.appender.R.layout.ConversionPattern=[ztf] %d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c] [%p] - %m%n

#是注释,想用了就把它去掉这样就会在你项目中自动生成一个日志文件叫bbscs_sys_log.txt

有问题在问吧

因为数据库有事务管理