hibernateデータの変更挿入{{hibernate:でーたのへんこう}}

1298 ワード

SSHを使用しているときにまた問題が発生し、データベースからデータを検索して保存するときにレコードを再挿入するようになりました.ログを見ると保存時にこのオブジェクトは過渡的に扱われているので当然hibernateはupdateではなくinsertを使用していますが、これまでも他の実験で同じ論理で問題はありませんでしたが、今回は機能が多かっただけです.
ロジックは多分、actionでIdに基づいてオブジェクトを検索し、値を変更してビジネス層を呼び出して保存します.このようにすると、最初に検索した後に保存された操作は1つのトランザクションではなく、保存可能なときにsessionがオブジェクトとの関連を解放し、オブジェクトも過渡的になり、長い間考えていたが、ロジックをactionでnewのオブジェクトに変更し、idと修正が必要な属性を割り当て、ビジネス層に渡した.ビジネス・レイヤでクエリーして変更して保存し、ビジネス・レイヤのメソッドをトランザクションに構成すると、問題が解決します.
構成方法は次のとおりです.
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="sessionFactory" ref="sessionFactory"></property>
	</bean>
	<tx:advice id="txAdvice" transaction-manager="transactionManager">
		<tx:attributes>
			<tx:method name="*"/>
		</tx:attributes>
	</tx:advice>
	<aop:config>
		<aop:pointcut id="myPointcut" expression="bean(floorService)||bean(tableService)"/>
		<aop:advisor advice-ref="txAdvice" pointcut-ref="myPointcut"/>
	</aop:config>

 floorServiceとtableServiceは、2つのビジネス・レイヤのオブジェクトです.は、オブジェクトの各メソッドをトランザクションとして構成します.