论坛首页 入门讨论版 Hibernate

hibernate映射关系-----求助

浏览 1610 次
该帖已经被评为新手帖
作者 正文
最后更新时间:2006-11-02
我的本意是想实现关联读取,但是保存或者更新时是分开处理的。其.hmm文件配置如下:
1。主表配置
  <hibernate-mapping>
	<class name="com.newgrand.alert.entity.AlertObject"
		table="ALERT_OBJECT" lazy="false">
		<id name="alertid" type="long" column="ALERTID_" unsaved-value="null">
			<generator class="assigned"/>
		</id>
		<property name="alertname" type="string">
			<column name="ALERTNAME_" length="100" />
		</property>
		<many-to-one name="alertplugin"
			class="com.newgrand.alert.entity.AlertPlugin" column="PLUGINID_"
			unique="true" cascade="none" fetch="join">
		</many-to-one>
		<one-to-one name="runstrategy"
			class="com.newgrand.alert.entity.AlertRunStrategy" cascade="none"
			fetch="join" property-ref="alertObject"/>
		<set name="alertreceivers" table="ALERT_RECEIVER" lazy="true"
			inverse="true" cascade="none" sort="unsorted">
			<key column="ALERTID_"></key>
			<one-to-many
				class="com.newgrand.alert.entity.AlertReceiver" />
		</set>
		<set name="alertconditions" table="ALERT_CONDITION" lazy="true"
			inverse="true" cascade="none">
			<key column="ALERTID_"></key>
			<one-to-many
				class="com.newgrand.alert.entity.AlertCondition" />
		</set>
		<set name="alertproperties" table="ALERT_PROPERTY" lazy="true"
			inverse="true" cascade="none">
			<key column="ALERTID_"></key>
			<one-to-many
				class="com.newgrand.alert.entity.AlertProperty" />
		</set>
		<set name="alertspringers" table="ALERT_SPRINGER" lazy="true"
			inverse="true" cascade="none">
			<key column="ALERTID_"></key>
			<one-to-many
				class="com.newgrand.alert.entity.AlertSpringer" />
		</set>
		<set name="functionpoint" table="ALERT_FUNCTIONPOINT"
			lazy="true" inverse="true" cascade="none">
			<key column="ALERTID_"></key>
			<one-to-many
				class="com.newgrand.alert.entity.AlertFunctionPoint" />
		</set>
。。。。。。
2。其余各关联表的配置如下:
2。1 
<hibernate-mapping>
	<class name="com.newgrand.alert.entity.AlertCondition" table="ALERT_CONDITION" lazy="false">
		<id name="id" type="long" unsaved-value="null">
			<column name="ID_" />
			<generator
				class="com.newgrand.alert.idgernator.JupTablesIdGenerator">
				<param name="table">KEY_VALUES</param>
				<param name="column">VALUE_</param>
				<param name="pkcolumn">ID_</param>
				<param name="pkvalue">ALERT_CONDITION_KEY</param>
				<param name="ptable">ALERT_CONDITION</param>
				<param name="tablepkcolumn">ID_</param>
			</generator>
		</id>
		<many-to-one name="alertObject"
			class="com.newgrand.alert.entity.AlertObject" cascade="none"
			fetch="join" access="property"
			column="ALERTID_" not-null="true">
		</many-to-one>
。。。。。。

2。2
   <hibernate-mapping>
	<class name="com.newgrand.alert.entity.AlertFunction" table="ALERT_FUNCTION" lazy="false">
		<id name="id" type="long">
			<column name="ID_" />
			<generator
				class="com.newgrand.alert.idgernator.JupTablesIdGenerator">
				<param name="table">KEY_VALUES</param>
				<param name="column">VALUE_</param>
				<param name="pkcolumn">ID_</param>
				<param name="pkvalue">ALERT_FUNCTION_KEY</param>
				<param name="ptable">ALERT_FUNCTION</param>
				<param name="tablepkcolumn">ID_</param>
			</generator>
		</id>
		<property name="alertid" type="long">
			<column name="ALERTID_"/>
		</property>
。。。。。。

2。3
  <hibernate-mapping>
	<class name="com.newgrand.alert.entity.AlertFunctionPoint" table="ALERT_FUNCTIONPOINT" lazy="false">
		<id name="id" type="long" unsaved-value="null">
			<column name="ID_"/>
			<generator
				class="com.newgrand.alert.idgernator.JupTablesIdGenerator">
				<param name="table">KEY_VALUES</param>
				<param name="column">VALUE_</param>
				<param name="pkcolumn">ID_</param>
				<param name="pkvalue">ALERT_FUNCTIONPOINT_KEY</param>
				<param name="ptable">ALERT_FUNCTIONPOINT</param>
				<param name="tablepkcolumn">ID_</param>
			</generator>
		</id>
		<many-to-one name="alertObject"
			class="com.newgrand.alert.entity.AlertObject" cascade="none"
			fetch="join" access="property"
			column="ALERTID_" not-null="true">
		</many-to-one>
。。。。。。

2。4
<hibernate-mapping>
	<class name="com.newgrand.alert.entity.AlertProperty" table="ALERT_PROPERTY" lazy="false">
		<id name="id" type="long" unsaved-value="null">
			<column name="ID_"/>
			<generator
				class="com.newgrand.alert.idgernator.JupTablesIdGenerator">
				<param name="table">KEY_VALUES</param>
				<param name="column">VALUE_</param>
				<param name="pkcolumn">ID_</param>
				<param name="pkvalue">ALERT_PROPERTY_KEY</param>
				<param name="ptable">ALERT_PROPERTY</param>
				<param name="tablepkcolumn">ID_</param>
			</generator>
		</id>
		<many-to-one name="alertObject"
			class="com.newgrand.alert.entity.AlertObject" cascade="none"
			fetch="join" access="property"
			column="ALERTID_" not-null="true">
		</many-to-one>
。。。。。。
2。5
    <hibernate-mapping>
	<class name="com.newgrand.alert.entity.AlertReceiver"
		table="ALERT_RECEIVER" lazy="false">
		<id name="id" type="long" unsaved-value="null">
			<column name="ID_" />
			<generator
				class="com.newgrand.alert.idgernator.JupTablesIdGenerator">
				<param name="table">KEY_VALUES</param>
				<param name="column">VALUE_</param>
				<param name="pkcolumn">ID_</param>
				<param name="pkvalue">ALERT_RECEIVER_KEY</param>
				<param name="ptable">ALERT_RECEIVER</param>
				<param name="tablepkcolumn">ID_</param>
			</generator>
		</id>
		<many-to-one name="alertObject"
			class="com.newgrand.alert.entity.AlertObject" cascade="none"
			fetch="join" access="property" column="ALERTID_" not-null="true">
		</many-to-one>
。。。。。。
2。6
   <hibernate-mapping>
	<class name="com.newgrand.alert.entity.AlertRunStrategy"
		table="ALERT_RUNSTRATEGY" lazy="false">
		<id name="id" column="ID_" unsaved-value="null">
			<generator
				class="com.newgrand.alert.idgernator.JupTablesIdGenerator">
				<param name="table">KEY_VALUES</param>
				<param name="column">VALUE_</param>
				<param name="pkcolumn">ID_</param>
				<param name="pkvalue">ALERT_RUNSTRATEGY_KEY</param>
				<param name="ptable">ALERT_RUNSTRATEGY</param>
				<param name="tablepkcolumn">ID_</param>
			</generator>
		</id>
		<many-to-one name="alertObject"
			class="com.newgrand.alert.entity.AlertObject" column="ALERTID_"
			unique="true" cascade="none" fetch="join">
		</many-to-one>
。。。。。。

2。7
  <hibernate-mapping>
	<class name="com.newgrand.alert.entity.AlertSpringer" table="ALERT_SPRINGER" lazy="false">
		<id name="id" type="long" unsaved-value="null">
			<column name="ID_"/>
			<generator
				class="com.newgrand.alert.idgernator.JupTablesIdGenerator">
				<param name="table">KEY_VALUES</param>
				<param name="column">VALUE_</param>
				<param name="pkcolumn">ID_</param>
				<param name="pkvalue">ALERT_SPRINGER_KEY</param>
				<param name="ptable">ALERT_SPRINGER</param>
				<param name="tablepkcolumn">ID_</param>
			</generator>
		</id>
		<many-to-one name="alertObject"
			class="com.newgrand.alert.entity.AlertObject" cascade="none"
			fetch="join" access="property"
			column="ALERTID_" not-null="true">
		</many-to-one>
。。。。。。

我用spring+hibernate的架构,可是在实现保存的时候,报如下错误:
13:30:23,406 INFO  [STDOUT] Hibernate: select alertplugi0_.PLUGINID_ as PLUGINID1_6_0_, alertplugi0_.PLUGINNAME_ as PLUGINNAME2_6_0_, alertplugi0_.SQLSCRIP_ as SQLSCRIP3_6_0_, alertplugi0_.FIELD_ as FIELD4_6_0_, alertplugi0_.PAGELINK_ as PAGELINK5_6_0_, alertplugi0_.CLASSNAME_ as CLASSNAME6_6_0_, alertplugi0_.MSGSENDMODE_ as MSGSENDM7_6_0_, alertplugi0_.MEMO_ as MEMO8_6_0_ from ALERT_PLUGIN alertplugi0_ where alertplugi0_.PLUGINID_=?
13:34:00,343 INFO  [STDOUT] Hibernate: insert into ALERT_RUNSTRATEGY (ALERTID_, SENDCOUNT_, SETTINGSTRING_, LASTRUNTIME_, MSGSENDMODE_, NEEDLOG_, AUTODELLOG_, LOGDAYS_, ID_) values (?, ?, ?, ?, ?, ?, ?, ?, ?)
13:34:00,343 INFO  [STDOUT] Hibernate: insert into ALERT_CONDITION (ALERTID_, LEFTBRACKED_, FUNCTIONCODE_, OPERATOR_, VALUE_, RIGHTBRACKET_, LOGICOPERATOR_, ID_) values (?, ?, ?, ?, ?, ?, ?, ?)
13:34:00,359 INFO  [STDOUT] Hibernate: insert into ALERT_RECEIVER (ALERTID_, USERNO_, MEMO_, ID_) values (?, ?, ?, ?)
13:34:00,359 INFO  [STDOUT] Hibernate: insert into ALERT_PROPERTY (ALERTID_, PROPERTY_, DATATYPE_, VALUE_, MEMO_, ID_) values (?, ?, ?, ?, ?, ?)
13:34:00,375 INFO  [STDOUT] Hibernate: update ALERT_OBJECT set ALERTNAME_=?, PLUGINID_=?, ALERTSTATE_=?, ALERTMSG_=?, ALERTTYPE_=?, CONDITION_=?, MEMO=? where ALERTID_=?
13:34:00,375 ERROR [AbstractFlushingEventListener] Could not synchronize database state with session
org.hibernate.StaleStateException: Unexpected row count: 0 expected: 1
	at org.hibernate.jdbc.NonBatchingBatcher.addToBatch(NonBatchingBatcher.java:27)
	at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2204)
	at org.hibernate.persister.entity.AbstractEntityPersister.updateOrInsert(AbstractEntityPersister.java:2118)
	at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2374)
	at org.hibernate.action.EntityUpdateAction.execute(EntityUpdateAction.java:91)
	at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:248)
	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:232)
	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:140)
	at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:297)
	at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
	at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:985)
	at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:333)
	at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
	at org.springframework.orm.hibernate3.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:584)
	at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:500)
	at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:473)
	at org.springframework.transaction.interceptor.TransactionAspectSupport.doCommitTransactionAfterReturning(TransactionAspectSupport.java:267)
	at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:170)
	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:176)
	at $Proxy304.saveAlertDefinition(Unknown Source)
	at com.newgrand.alert.model.AlertDefinitionEditor.doSave(AlertDefinitionEditor.java:1064)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:585)
	at com.newgrand.util.invoke.Invoker.invokeWithException(Invoker.java:51)
	at com.newgrand.util.invoke.Invoker.invoke(Invoker.java:21)
	at com.newgrand.gs.ext.BMENUNODEInfo.reactOnSelect(BMENUNODEInfo.java:48)
	at com.newgrand.gs.server.util.NODEInfo.select(NODEInfo.java:148)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:585)
	at com.newgrand.gs.server.InteractionModel.invokeMethodInternally(InteractionModel.java:1453)
	at com.newgrand.gs.server.InteractionModel.invokeMethod(InteractionModel.java:1376)
	at com.newgrand.gs.server.XMLProcessor.processXML(XMLProcessor.java:289)
	at com.newgrand.gs.server.Connector.doPost(Connector.java:349)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
	at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:81)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
	at org.jboss.web.tomcat.security.CustomPrincipalValve.invoke(CustomPrincipalValve.java:39)
	at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:153)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:407)
	at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:59)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:856)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:744)
	at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
	at org.apache.tomcat.util.net.MasterSlaveWorkerThread.run(MasterSlaveWorkerThread.java:112)
	at java.lang.Thread.run(Thread.java:595)
13:34:00,406 INFO  [Invoker] java.lang.reflect.InvocationTargetException
com.newgrand.util.invoke.InvokeException: java.lang.reflect.InvocationTargetException
	at com.newgrand.util.invoke.Invoker.invokeWithException(Invoker.java:54)
	at com.newgrand.util.invoke.Invoker.invoke(Invoker.java:21)
	at com.newgrand.gs.ext.BMENUNODEInfo.reactOnSelect(BMENUNODEInfo.java:48)
	at com.newgrand.gs.server.util.NODEInfo.select(NODEInfo.java:148)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:585)
	at com.newgrand.gs.server.InteractionModel.invokeMethodInternally(InteractionModel.java:1453)
	at com.newgrand.gs.server.InteractionModel.invokeMethod(InteractionModel.java:1376)
	at com.newgrand.gs.server.XMLProcessor.processXML(XMLProcessor.java:289)
	at com.newgrand.gs.server.Connector.doPost(Connector.java:349)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
	at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:81)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
	at org.jboss.web.tomcat.security.CustomPrincipalValve.invoke(CustomPrincipalValve.java:39)
	at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:153)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:407)
	at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:59)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:856)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:744)
	at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
	at org.apache.tomcat.util.net.MasterSlaveWorkerThread.run(MasterSlaveWorkerThread.java:112)
	at java.lang.Thread.run(Thread.java:595)
Caused by: java.lang.reflect.InvocationTargetException
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:585)
	at com.newgrand.util.invoke.Invoker.invokeWithException(Invoker.java:51)
	... 33 more
Caused by: org.springframework.orm.hibernate3.HibernateOptimisticLockingFailureException: Unexpected row count: 0 expected: 1; nested exception is org.hibernate.StaleStateException: Unexpected row count: 0 expected: 1
	at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:649)
	at org.springframework.orm.hibernate3.HibernateTransactionManager.convertHibernateAccessException(HibernateTransactionManager.java:715)
	at org.springframework.orm.hibernate3.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:592)
	at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:500)
	at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:473)
	at org.springframework.transaction.interceptor.TransactionAspectSupport.doCommitTransactionAfterReturning(TransactionAspectSupport.java:267)
	at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:170)
	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:176)
	at $Proxy304.saveAlertDefinition(Unknown Source)
	at com.newgrand.alert.model.AlertDefinitionEditor.doSave(AlertDefinitionEditor.java:1064)
	... 38 more
Caused by: org.hibernate.StaleStateException: Unexpected row count: 0 expected: 1
	at org.hibernate.jdbc.NonBatchingBatcher.addToBatch(NonBatchingBatcher.java:27)
	at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2204)
	at org.hibernate.persister.entity.AbstractEntityPersister.updateOrInsert(AbstractEntityPersister.java:2118)
	at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2374)
	at org.hibernate.action.EntityUpdateAction.execute(EntityUpdateAction.java:91)
	at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:248)
	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:232)
	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:140)
	at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:297)
	at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
	at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:985)
	at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:333)
	at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
	at org.springframework.orm.hibernate3.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:584)
	... 46 more

请帮忙看看,非常感谢!
   
最后更新时间:2006-11-02
可以这样做吗?
   
0 请登录后投票
论坛首页 入门讨论版 Hibernate

跳转论坛:
JavaEye推荐