为什么我执行hibernate查询的时候,会多执行了更新操作呢》??

star20029399 2011-03-28 09:13:10
同上.

2011-03-28 09:09:44 [日志信息] Write Para1:null
2011-03-28 09:09:44 [日志信息] Write Para1:/user.do
2011-03-28 09:09:44 [日志信息] Write Para1:method=getList
2011-03-28 09:09:44 [日志信息] Write Para1:/doUser.do
Hibernate: select count(*) as col_0_0_ from kejia.dbo.td_user tduser0_
Hibernate: select top 18 tduser0_.id as id0_, tduser0_.userName as userName0_, tduser0_.password as password0_, tduser0_.name as name0_, tduser0_.role as role0_, tduser0_.addDate as addDate0_ from kejia.dbo.td_user tduser0_
Hibernate: update kejia.dbo.td_user set userName=?, password=?, name=?, role=?, addDate=? where id=?
Hibernate: update kejia.dbo.td_user set userName=?, password=?, name=?, role=?, addDate=? where id=?
Hibernate: update kejia.dbo.td_user set userName=?, password=?, name=?, role=?, addDate=? where id=?
Hibernate: update kejia.dbo.td_user set userName=?, password=?, name=?, role=?, addDate=? where id=?
Hibernate: update kejia.dbo.td_user set userName=?, password=?, name=?, role=?, addDate=? where id=?
Hibernate: update kejia.dbo.td_user set userName=?, password=?, name=?, role=?, addDate=? where id=?
Hibernate: update kejia.dbo.td_user set userName=?, password=?, name=?, role=?, addDate=? where id=?
Hibernate: update kejia.dbo.td_user set userName=?, password=?, name=?, role=?, addDate=? where id=?
Hibernate: update kejia.dbo.td_user set userName=?, password=?, name=?, role=?, addDate=? where id=?
Hibernate: update kejia.dbo.td_user set userName=?, password=?, name=?, role=?, addDate=? where id=?
Hibernate: update kejia.dbo.td_user set userName=?, password=?, name=?, role=?, addDate=? where id=?
Hibernate: update kejia.dbo.td_user set userName=?, password=?, name=?, role=?, addDate=? where id=?
Hibernate: update kejia.dbo.td_user set userName=?, password=?, name=?, role=?, addDate=? where id=?
Hibernate: update kejia.dbo.td_user set userName=?, password=?, name=?, role=?, addDate=? where id=?
Hibernate: update kejia.dbo.td_user set userName=?, password=?, name=?, role=?, addDate=? where id=?
Hibernate: update kejia.dbo.td_user set userName=?, password=?, name=?, role=?, addDate=? where id=?
Hibernate: update kejia.dbo.td_user set userName=?, password=?, name=?, role=?, addDate=? where id=?
Hibernate: update kejia.dbo.td_user set userName=?, password=?, name=?, role=?, addDate=? where id=?
{"total":19,"data":[{"id":19,"name":"asfdasfd","role":0,"userName":"admin","addDate":{"time":1301274584796,"minutes":9,"seconds":44,"hours":9,"month":2,"timezoneOffset":-480,"year":111,"day":1,"date":28},"password":"admin"},{"id":20,"name":"dfasdf","role":0,"userName":"asdf222","addDate":{"time":1301274584796,"minutes":9,"seconds":44,"hours":9,"month":2,"timezoneOffset":-480,"year":111,"day":1,"date":28},"password":"as"},{"id":21,"name":"sdfasdf","role":0,"userName":"asdf","addDate":{"time":1301274584796,"minutes":9,"seconds":44,"hours":9,"month":2,"timezoneOffset":-480,"year":111,"day":1,"date":28},"password":"asfa"},{"id":22,"name":"3333","role":0,"userName":"dddd","addDate":{"time":1301274584796,"minutes":9,"seconds":44,"hours":9,"month":2,"timezoneOffset":-480,"year":111,"day":1,"date":28},"password":"dddd"},{"id":23,"name":"3333","role":0,"userName":"3333","addDate":{"time":1301274584796,"minutes":9,"seconds":44,"hours":9,"month":2,"timezoneOffset":-480,"year":111,"day":1,"date":28},"password":"333"},{"id":24,"name":"2323","role":0,"userName":"232","addDate":{"time":1301274584796,"minutes":9,"seconds":44,"hours":9,"month":2,"timezoneOffset":-480,"year":111,"day":1,"date":28},"password":"323"},{"id":25,"name":"23424","role":0,"userName":"234234","addDate":{"time":1301274584796,"minutes":9,"seconds":44,"hours":9,"month":2,"timezoneOffset":-480,"year":111,"day":1,"date":28},"password":"234"},{"id":26,"name":"234234","role":0,"userName":"234234","addDate":{"time":1301274584796,"minutes":9,"seconds":44,"hours":9,"month":2,"timezoneOffset":-480,"year":111,"day":1,"date":28},"password":"234"},{"id":28,"name":"4234234","role":0,"userName":"2342","addDate":{"time":1301274584796,"minutes":9,"seconds":44,"hours":9,"month":2,"timezoneOffset":-480,"year":111,"day":1,"date":28},"password":"34234"},{"id":29,"name":"2323","role":0,"userName":"22","addDate":{"time":1301274584796,"minutes":9,"seconds":44,"hours":9,"month":2,"timezoneOffset":-480,"year":111,"day":1,"date":28},"password":"323"},{"id":30,"name":"33","role":0,"userName":"333","addDate":{"time":1301274584796,"minutes":9,"seconds":44,"hours":9,"month":2,"timezoneOffset":-480,"year":111,"day":1,"date":28},"password":"33"},{"id":33,"name":"孙超","role":0,"userName":"sunchao","addDate":{"time":1301274584796,"minutes":9,"seconds":44,"hours":9,"month":2,"timezoneOffset":-480,"year":111,"day":1,"date":28},"password":"shuxhao"},{"id":34,"name":"23","role":0,"userName":"23","addDate":{"time":1301274584796,"minutes":9,"seconds":44,"hours":9,"month":2,"timezoneOffset":-480,"year":111,"day":1,"date":28},"password":"23"},{"id":37,"name":"bbbbb","role":0,"userName":"aaaaaaaaa","addDate":{"time":1301274584796,"minutes":9,"seconds":44,"hours":9,"month":2,"timezoneOffset":-480,"year":111,"day":1,"date":28},"password":"bbbb"},{"id":38,"name":"cccccccc","role":0,"userName":"aaaaaaa","addDate":{"time":1301274584796,"minutes":9,"seconds":44,"hours":9,"month":2,"timezoneOffset":-480,"year":111,"day":1,"date":28},"password":"bbbbbbbbbb"},{"id":39,"name":"haha","role":0,"userName":"hello","addDate":{"time":1301274584796,"minutes":9,"seconds":44,"hours":9,"month":2,"timezoneOffset":-480,"year":111,"day":1,"date":28},"password":"mima"},{"id":40,"name":"3333","role":0,"userName":"33333","addDate":{"time":1301274584796,"minutes":9,"seconds":44,"hours":9,"month":2,"timezoneOffset":-480,"year":111,"day":1,"date":28},"password":"3333"},{"id":41,"name":"ddddd","role":0,"userName":"ddddd","addDate":{"time":1301274584796,"minutes":9,"seconds":44,"hours":9,"month":2,"timezoneOffset":-480,"year":111,"day":1,"date":28},"password":"ddd"}],"success":true}


...全文
346 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
KevinDurant 2011-09-17
  • 打赏
  • 举报
回复
想问一下这个update 最终是否有在数据库执行?
我测试过先在plsql 执行for update ,,这个update 语句就会等待,

最终数据是没有修改的。。。
star20029399 2011-04-22
  • 打赏
  • 举报
回复
我是实体里多写了this.date=new Date()的事.感谢各位了.
wkcgy 2011-03-28
  • 打赏
  • 举报
回复
我也遇到这种情况,当时的情况就是因为实体类的date属性的set方法中直接date=new Date();
所以就会出现查询的时候也更新了!!不知道你的是什么回事!!
star20029399 2011-03-28
  • 打赏
  • 举报
回复
这么说这个数据库实例还不能随便动了?
before_zero 2011-03-28
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 star20029399 的回复:]

Java code

public void setAddDate(Date addDate) {
Date date = new Date();
this.addDate = date;
}



找到了。为什么我把set写成这样就会出现上面的问题呢?
[/Quote]

持久化对象被你更新了,hibernate自然要维护到数据库去
star20029399 2011-03-28
  • 打赏
  • 举报
回复

public void setAddDate(Date addDate) {
Date date = new Date();
this.addDate = date;
}


找到了。为什么我把set写成这样就会出现上面的问题呢?
游一游走一走 2011-03-28
  • 打赏
  • 举报
回复
我也遇见过类似的问题,查了好久才搞定,不知道你是不是属于我这种情况,你先排除下:
net.hlj.kj.mpppings.TdUse 在这个实体类的get方法里可能含有某种逻辑,比如
public String getName(){
return name==null?"":name;
}
这样在进行脏数据检查时会认为它是脏数据,需要更新,但其实什么都无变,我采用的解决办法是将配置文件增加一个属性access="field" 这样就不会通过get方法比较属性而直接访问属性字段
<property name="name" type="java.lang.String" access="field">
<column name="name" length="50" />
</property>
star20029399 2011-03-28
  • 打赏
  • 举报
回复

<!-- 配置事务管理器 -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref local="sessionFactory" />
</property>
</bean>

<aop:config>
<aop:pointcut id="daoMethods"
expression="execution(* net.hlj.kj.dao.*.*(..))" />
<!-- 定义了将采用何种拦截操作,这里引用到 txAdvice -->
<aop:advisor advice-ref="txAdvice" pointcut-ref="daoMethods" />
</aop:config>
<!-- 配置事务特性 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="*" propagation="REQUIRED" />

</tx:attributes>
</tx:advice>
<tx:annotation-driven transaction-manager="transactionManager"
proxy-target-class="true" />



我把事务的去掉就好使了,但这样增删改就不行了。帮看看事务这怎么不对了?
before_zero 2011-03-28
  • 打赏
  • 举报
回复
是web过来连action一起测试了,还是单测services层及其以下的?如果是用web测试,可以先用junit 或者main方式单测services
star20029399 2011-03-28
  • 打赏
  • 举报
回复
sql 2000
qingyuan18 2011-03-28
  • 打赏
  • 举报
回复
<generator class="native"></generator>
这样配置Hibernate会根据底层数据库自动选择生成主键的方式,比如DB2可能会用identified列
问题应该出自这里:一般的项目还是需要自己指定,你是什么数据库?换成制定的主键生成方式(比如:generator class="sequence")再看还有没有这样的问题
star20029399 2011-03-28
  • 打赏
  • 举报
回复

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">


<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation"
value="classpath:hibernate.cfg.xml">
</property>
</bean>


<!-- 配置事务管理器 -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref local="sessionFactory" />
</property>
</bean>

<aop:config>
<aop:pointcut id="daoMethods"
expression="execution(* net.hlj.kj.dao.*.*(..))" />
<!-- 定义了将采用何种拦截操作,这里引用到 txAdvice -->
<aop:advisor advice-ref="txAdvice" pointcut-ref="daoMethods" />
</aop:config>
<!-- 配置事务特性 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="*" propagation="REQUIRED" />

</tx:attributes>
</tx:advice>
<tx:annotation-driven transaction-manager="transactionManager"
proxy-target-class="true" />


<!--用户管理 -->
<bean id="userDao" class="net.hlj.kj.dao.UserDao">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<bean id="userService" class="net.hlj.kj.service.UserServiceImpl">
<property name="userDao">
<ref bean="userDao" />
</property>
</bean>


</beans>
star20029399 2011-03-28
  • 打赏
  • 举报
回复
我没跟踪出来啥呀?》?就是impl执行完dao的方法就出来了。
lianjiaying 2011-03-28
  • 打赏
  • 举报
回复
这个头一次见....跟踪代码看看... 不然是方法窜了??
star20029399 2011-03-28
  • 打赏
  • 举报
回复

<hibernate-mapping>
<class name="net.hlj.kj.mpppings.TdUser" table="td_user" schema="dbo" catalog="kejia">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="native"></generator>
</id>
<property name="userName" type="java.lang.String">
<column name="userName" length="50" />
</property>
<property name="password" type="java.lang.String">
<column name="password" length="50" />
</property>
<property name="name" type="java.lang.String">
<column name="name" length="50" />
</property>
<property name="role" type="java.lang.Integer">
<column name="role" />
</property>
<property name="addDate" type="java.util.Date">
<column name="addDate" length="23" />
</property>
</class>
</hibernate-mapping>
star20029399 2011-03-28
  • 打赏
  • 举报
回复
就是在impl层执行的时候出来的,dao层却没有,是不是配置文件的事呀?查询的时候自动更新了?
star20029399 2011-03-28
  • 打赏
  • 举报
回复

impl:
public PagerModel getList() {
PagerModel pm=userDao.getList();
return pm;
}

dao
public PagerModel getList() {
PagerModel pm=searchPaginated("from TdUser");
return pm;
}

舞黯然 2011-03-28
  • 打赏
  • 举报
回复
不贴代码怎么看
lovemichael2 2011-03-28
  • 打赏
  • 举报
回复
看看你按钮以及表单的提交方式
star20029399 2011-03-28
  • 打赏
  • 举报
回复
追踪不到呀,在dao层没问题,但是到了impl层就更新了。好像就是查询出几条就自动更新几条呢?
加载更多回复(3)

81,090

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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