Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [eclipselink-users] duplicate assignments to same column in update

Very odd,
  When the error occurs, does it always occur for that same deployment, or
does it sometimes fail, sometimes pass with the same run?
  I assume it is related to association overrides and the multiple Embedded
Money relationships.  If you comment out these in tern, does the issue go
away?


Joseph Chiu-2 wrote:
> 
> Hi,
> 
> 
> 
> I am having a problem which I think might be happening inside
> EclipseLink.  Between multiple runs of the same test program, the
> program (which is deterministic) will randomly pass or fail.  When the
> program passes, the databse result is as expected.  When it fails, the
> error is always the same: an update error where there are multiple
> assignments to the same column. (Error message and code fragments
> pasted below).
> 
> I am still relatively new to EL and JPA, and am not sure how to
> proceed at this point.  I tried to look through bugs.eclipse.org, and
> have searched for a couple days now, but am still completely stuck.
> Thanks in advance for any help or guidance!
> 
> Joseph
> 
> 
> 
> I am running EL 2.0.0 against Postgresql 8.3.  I have tried EL 2.1.1
> and get the same result.
> 
> My Money class is @Embeddable:
> 
> @Embeddable @Access(AccessType.FIELD)
> public class Money extends Object implements Comparable<Money> {
> [...]
>  @Column (nullable = false, precision=12, scale=3,
> columnDefinition="DECIMAL(12,2)")
>  protected BigDecimal amount;
> 
>  @Column (nullable = false, columnDefinition="CHAR(3)")
>  protected String denomination;
> [...]
> 
> 
> 
> And I use that in the CampaignResult class:
> @Entity
> public class CampaignResult {
>  @Id
>  @GeneratedValue(strategy = GenerationType.IDENTITY)
>  private int id;
> 
>  @OneToOne(optional = false, fetch = FetchType.LAZY, cascade =
> CascadeType.ALL)
>  private Campaign campaign;
>  @Version
>  private Timestamp lastUpdated;
> [...]
>  @AttributeOverrides({
>   @AttributeOverride(name="amount", column=@Column(name="ACTUAL_VALUE")),
>   @AttributeOverride(name="denomination",
> column=@Column(name="ACTUAL_VALUE_DENOMINATION"))})
>  private Money actualValue;
> 
>  @AttributeOverrides({
>   @AttributeOverride(name="amount",
> column=@Column(name="REPORTED_VALUE")),
>   @AttributeOverride(name="denomination",
> column=@Column(name="REPORTED_VALUE_DENOMINATION"))})
>  private Money reportedValue;
>  @AttributeOverrides({
>   @AttributeOverride(name="amount", column=@Column(name="CHARGED_VALUE")),
>   @AttributeOverride(name="denomination",
> column=@Column(name="CHARGED_VALUE_DENOMINATION"))})
>  private Money chargedValue;
> [...]
> 
> 
> 
> It is when I update the chagedValue member and persist to the database
> that I get the multiple assignments to the same CHARGED_VALUE column:
> 
> [EL Warning]: 2010-10-08
> 13:14:45.535--UnitOfWork(3431235)--Thread(Thread[pool-1-thread-1,5,main])--Local
> Exception Stack:
> 
> Exception [EclipseLink-4002] (Eclipse Persistence Services -
> 2.1.1.v20100817-r8050):
> org.eclipse.persistence.exceptions.DatabaseException
> 
> Internal Exception: org.postgresql.util.PSQLException: ERROR: multiple
> assignments to same column "charged_value"
> 
> Error Code: 0
> 
> Call: UPDATE CAMPAIGNRESULT SET CHARGED_VALUE = ?, CHARGED_VALUE = ?,
> LASTUPDATED = ? WHERE ((ID = ?) AND (LASTUPDATED = ?))
> 
>                 bind => [2.93, 2.93, 2010-10-08 13:14:45.523302, 1659,
> 2010-10-08 13:14:45.351123]
> 
> Query:
> UpdateObjectQuery(com.me.modules.advertiser.domain.CampaignResult@182c132)
> 
>                 at
> org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java:333)
> 
>                 at
> org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.processExceptionForCommError(DatabaseAccessor.java:1419)
> 
>                 at
> org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeDirectNoSelect(DatabaseAccessor.java:795)
> 
>                 at
> org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeNoSelect(DatabaseAccessor.java:863)
> 
>                 at
> org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:583)
> 
>                 at
> org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java:526)
> 
>                 at
> org.eclipse.persistence.internal.sessions.AbstractSession.executeCall(AbstractSession.java:980)
> 
>                 at
> org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:206)
> 
>                 at
> org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:192)
> 
>                 at
> org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.updateObject(DatasourceCallQueryMechanism.java:747)
> 
>                 at
> org.eclipse.persistence.internal.queries.StatementQueryMechanism.updateObject(StatementQueryMechanism.java:430)
> 
>                 at
> org.eclipse.persistence.internal.queries.DatabaseQueryMechanism.updateObjectForWriteWithChangeSet(DatabaseQueryMechanism.java:1144)
> 
>                 at
> org.eclipse.persistence.queries.UpdateObjectQuery.executeCommitWithChangeSet(UpdateObjectQuery.java:84)
> 
>                 at
> org.eclipse.persistence.internal.queries.DatabaseQueryMechanism.executeWriteWithChangeSet(DatabaseQueryMechanism.java:290)
> 
>                 at
> org.eclipse.persistence.queries.WriteObjectQuery.executeDatabaseQuery(WriteObjectQuery.java:58)
> 
>                 at
> org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:736)
> 
>                 at
> org.eclipse.persistence.queries.DatabaseQuery.executeInUnitOfWork(DatabaseQuery.java:643)
> 
>                 at
> org.eclipse.persistence.queries.ObjectLevelModifyQuery.executeInUnitOfWorkObjectLevelModifyQuery(ObjectLevelModifyQuery.java:108)
> 
>                 at
> org.eclipse.persistence.queries.ObjectLevelModifyQuery.executeInUnitOfWork(ObjectLevelModifyQuery.java:85)
> 
>                 at
> org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2909)
> 
>                 at
> org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1291)
> 
>                 at
> org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1273)
> 
>                 at
> org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1233)
> 
>                 at
> org.eclipse.persistence.internal.sessions.CommitManager.commitChangedObjectsForClassWithChangeSet(CommitManager.java:265)
> 
>                 at
> org.eclipse.persistence.internal.sessions.CommitManager.commitAllObjectsForClassWithChangeSet(CommitManager.java:190)
> 
>                 at
> org.eclipse.persistence.internal.sessions.CommitManager.commitAllObjectsWithChangeSet(CommitManager.java:136)
> 
>                 at
> org.eclipse.persistence.internal.sessions.AbstractSession.writeAllObjectsWithChangeSet(AbstractSession.java:3348)
> 
>                 at
> org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.commitToDatabase(UnitOfWorkImpl.java:1422)
> 
>                 at
> org.eclipse.persistence.internal.sessions.RepeatableWriteUnitOfWork.commitToDatabase(RepeatableWriteUnitOfWork.java:546)
> 
>                 at
> org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.commitToDatabaseWithPreBuiltChangeSet(UnitOfWorkImpl.java:1568)
> 
>                 at
> org.eclipse.persistence.internal.sessions.RepeatableWriteUnitOfWork.writeChanges(RepeatableWriteUnitOfWork.java:359)
> 
>                 at
> org.eclipse.persistence.internal.jpa.EntityManagerImpl.flush(EntityManagerImpl.java:741)
> 
>                 at
> com.tweetup.modules.advertiser.domain.repository.impl.AccountingProviderImpl.chargeAccountForDate(AccountingProviderImpl.java:168)
> 
>                 at
> com.tweetup.modules.advertiser.domain.repository.impl.AccountingProviderTest.testCompleteBilling(AccountingProviderTest.java:305)
> 
>                 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:597)
> 
>                 at
> org.testng.internal.MethodHelper.invokeMethod(MethodHelper.java:640)
> 
>                 at
> org.testng.internal.Invoker.invokeMethod(Invoker.java:627)
> 
>                 at
> org.testng.internal.Invoker.invokeTestMethod(Invoker.java:799)
> 
>                 at
> org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1103)
> 
>                 at
> org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:137)
> 
>                 at
> org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:121)
> 
>                 at org.testng.TestRunner.runWorkers(TestRunner.java:1098)
> 
>                 at org.testng.TestRunner.privateRun(TestRunner.java:727)
> 
>                 at org.testng.TestRunner.run(TestRunner.java:581)
> 
>                 at org.testng.SuiteRunner.runTest(SuiteRunner.java:315)
> 
>                 at
> org.testng.SuiteRunner.runSequentially(SuiteRunner.java:310)
> 
>                 at org.testng.SuiteRunner.privateRun(SuiteRunner.java:272)
> 
>                 at org.testng.SuiteRunner.run(SuiteRunner.java:221)
> 
>                 at
> org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:40)
> 
>                 at
> org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:83)
> 
>                 at
> org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:151)
> 
>                 at
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
> 
>                 at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
> 
>                 at java.lang.Thread.run(Thread.java:619)
> 
> 
> 


-----
http://wiki.eclipse.org/User:James.sutherland.oracle.com James Sutherland 
http://www.eclipse.org/eclipselink/
 EclipseLink ,  http://www.oracle.com/technology/products/ias/toplink/
TopLink 
Wiki:  http://wiki.eclipse.org/EclipseLink EclipseLink , 
http://wiki.oracle.com/page/TopLink TopLink 
Forums:  http://forums.oracle.com/forums/forum.jspa?forumID=48 TopLink , 
http://www.nabble.com/EclipseLink-f26430.html EclipseLink 
Book:  http://en.wikibooks.org/wiki/Java_Persistence Java Persistence 
-- 
View this message in context: http://old.nabble.com/duplicate-assignments-to-same-column-in-update-tp29919049p30002066.html
Sent from the EclipseLink - Users mailing list archive at Nabble.com.



Back to the top