使用類似於下面的代碼時,只要我從來沒有記錄與前一記錄相同的主鍵進入,一切都可以,但如果我遇到了一個情況,我得到的同一個主鍵不能插入異常。無論如何設置Jpa將插入轉換爲更新,如果我得到一個具有相同主鍵的記錄?駱駝JMS更新JPA實體
from("jms:queue:myqueue")
.unmarshal(myGsonDataFormat)
.convertBodyTo(MyDBEntity.class)
.to("jpa:" + MyDBEntity.class.getName());
@Entity
@Table(name = "MyTableName")
public class MyDBEntity {
@Id
@Column(name = "column1", length =2)
private String column1;
@Column(name = "column2", length =2)
private String column2;
}
堆棧跟蹤:
2016-03-15 15:12:04,766 [imer://fireOnce] ERROR DefaultErrorHandler - Failed delivery for (MessageId: ID-WKSP000675FB-51972-1458069119050-0-5 on ExchangeId: ID-WKSP000675FB-51972-1458069119050-0-6). Exhausted after delivery attempt: 1 caught: <openjpa-2.4.1-r422266:1730418 nonfatal user error> org.apache.openjpa.persistence.InvalidStateException: Attempt to change a primary key field of an instance that already has a final object id. Only new, unflushed instances whose id you have not retrieved can have their primary keys changed.
FailedObject: com.ups.ops.cipe.external.route.entity.RouteEntity-0000003
消息歷史記錄
---------------------------------------------------------------------------------------------------------------------------------------
RouteId ProcessorId Processor Elapsed (ms)
[PackageCarStatusRo] [PackageCarStatusRo] [timer://fireOnce?repeatCount=1 ] [ 3763]
[PackageCarStatusRo] [log2 ] [log ] [ 0]
[PackageCarStatusRo] [PersistRouteEntity] [jpa:com.ups.ops.cipe.external.route.entity.RouteEntity ] [ 2354]
Exchange
---------------------------------------------------------------------------------------------------------------------------------------
Exchange[
Id ID-WKSP000675FB-51972-1458069119050-0-6
ExchangePattern InOnly
Headers {breadcrumbId=ID-WKSP000675FB-51972-1458069119050-0-1, CamelRedelivered=false, CamelRedeliveryCounter=0, firedTime=Tue Mar 15 15:12:00 EDT 2016}
BodyType com.ups.ops.cipe.external.route.entity.RouteEntity
Body RouteEntity [driverId=0000003 , countryCode=US, slic=2029, lastUpdateTime=Tue Mar 15 15:12:02 EDT 2016, driverName=D3, routeName=07, allStopCompleted=0.0, allStopTotal=0.0, puPkgsCompleted=0.0, percentComplete=0.0]
]
堆棧跟蹤
---------------------------------------------------------------------------------------------------------------------------------------
<openjpa-2.4.1-r422266:1730418 nonfatal user error> org.apache.openjpa.persistence.InvalidStateException: Attempt to change a primary key field of an instance that already has a final object id. Only new, unflushed instances whose id you have not retrieved can have their primary keys changed.
FailedObject: com.ups.ops.cipe.external.route.entity.RouteEntity-0000003
at org.apache.openjpa.kernel.StateManagerImpl.assertNoPrimaryKeyChange(StateManagerImpl.java:2185)
at org.apache.openjpa.kernel.StateManagerImpl.settingStringField(StateManagerImpl.java:2166)
at org.apache.openjpa.kernel.AttachStrategy.attachField(AttachStrategy.java:179)
at org.apache.openjpa.kernel.VersionAttachStrategy.attach(VersionAttachStrategy.java:166)
at org.apache.openjpa.kernel.AttachManager.attach(AttachManager.java:252)
at org.apache.openjpa.kernel.AttachManager.attach(AttachManager.java:105)
at org.apache.openjpa.kernel.BrokerImpl.attach(BrokerImpl.java:3508)
at org.apache.openjpa.kernel.DelegatingBroker.attach(DelegatingBroker.java:1213)
at org.apache.openjpa.persistence.EntityManagerImpl.merge(EntityManagerImpl.java:879)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:366)
at com.sun.proxy.$Proxy69.merge(Unknown Source)
at org.apache.camel.component.jpa.JpaProducer$1.save(JpaProducer.java:102)
at org.apache.camel.component.jpa.JpaProducer$1.doInTransaction(JpaProducer.java:78)
at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:131)
at org.apache.camel.component.jpa.JpaProducer.process(JpaProducer.java:61)
at org.apache.camel.util.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:61)
at org.apache.camel.processor.SendProcessor$2.doInAsyncProducer(SendProcessor.java:167)
at org.apache.camel.impl.ProducerCache.doInAsyncProducer(ProducerCache.java:304)
at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:162)
at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:77)
at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:448)
at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:191)
at org.apache.camel.processor.Pipeline.process(Pipeline.java:121)
at org.apache.camel.processor.Pipeline.process(Pipeline.java:83)
at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:448)
at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:191)
at org.apache.camel.processor.MulticastProcessor.doProcessSequential(MulticastProcessor.java:662)
at org.apache.camel.processor.MulticastProcessor.doProcessSequential(MulticastProcessor.java:590)
at org.apache.camel.processor.MulticastProcessor.process(MulticastProcessor.java:237)
at org.apache.camel.processor.Splitter.process(Splitter.java:104)
at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:77)
at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:448)
at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:191)
at org.apache.camel.processor.Pipeline.process(Pipeline.java:121)
at org.apache.camel.processor.Pipeline.process(Pipeline.java:83)
at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:448)
at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:191)
at org.apache.camel.processor.MulticastProcessor.doProcessSequential(MulticastProcessor.java:662)
at org.apache.camel.processor.MulticastProcessor.doProcessSequential(MulticastProcessor.java:590)
at org.apache.camel.processor.MulticastProcessor.process(MulticastProcessor.java:237)
at org.apache.camel.processor.Splitter.process(Splitter.java:104)
at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:77)
at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:448)
at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:191)
at org.apache.camel.processor.Pipeline.process(Pipeline.java:121)
at org.apache.camel.processor.Pipeline.process(Pipeline.java:83)
at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:191)
at org.apache.camel.component.timer.TimerConsumer.sendTimerExchange(TimerConsumer.java:165)
at org.apache.camel.component.timer.TimerConsumer$1.run(TimerConsumer.java:73)
at java.util.TimerThread.mainLoop(Timer.java:555)
at java.util.TimerThread.run(Timer.java:505)
請張貼異常的堆棧跟蹤。 –
@DraganBozanovic更新了一個例外。注意:我使用OpenJPA 2.4.1作爲我的實施 –
這不是堆棧跟蹤。 –