用hql语言查询单表,控制台居然打印hibernate-update语句

问题描述:

1、项目为java-web项目,hql查询代码写在业务逻辑类中,

2、看日志中,hibernate发出查询语句之后,就会出现x条update语句的日志,而x的值与查询结果数据的行数一致。

3、在update语句出现后,hibernate提交事务的相关类中出异常啦“数据长度10,限制的长度为8,无法update”.

问题原因:

在该类的hbm.xml文件中,发现某一属性的配置,与oracle的关键字date冲突

            <property
			name="Date"
			column="TXNDATE"
			type="string"
			not-null="true"
			length="8"
		/>

 将类的属性名字修改即可。

问题分析:

1、即使是hql查询的List对象,也是hibernate的持久态对象。

事务管理对象与事务代理对象
	<bean id="transactionManagerCtl"
		class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="sessionFactory">
			<ref bean="sessionFactoryCtl" />
		</property>
	</bean>

	<bean id="transactionInterceptorCtl"
		class="org.springframework.transaction.interceptor.TransactionInterceptor">
		<property name="transactionManager">
			<ref bean="transactionManagerCtl" />
		</property>
		<property name="transactionAttributes">
			<props>
				<prop key="*">PROPAGATION_REQUIRED,-Exception</prop>
			</props>
		</property>
	</bean>

 

业务逻辑类与业务逻辑类的代理类
<bean id="ADMZXGBOTarget" class="buss.console.db.service.impl.AdmZxgBO_Impl"
		singleton="false">
		
	</bean>
	<bean id="ADMZXGBO" class="org.springframework.aop.framework.ProxyFactoryBean">
		<property name="proxyInterfaces">
			<value>buss.console.db.service.iface.I_AdmZxgBO</value>
		</property>
		<property name="target">
			<ref local="ADMZXGBOTarget" />
		</property>
		<property name="interceptorNames">
			<list>
				<value>transactionInterceptorCtl</value>
			</list>
		</property>
	</bean>

 

2、hibernate在提交的事务的时候,会将当前session中持久态对象与数据库中数据相互比较,如果不同就会出现update语句。

3、hbm.xml中的名字为date的属性会影响到hql转化为正常的sql语句,从而使加载上来的list中对象的date属性值与实际数据库中表的date字段值不一致。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值