Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[eclipselink-dev] Duplicate assignment to same column with EcilpseLink 2.1.1 + Postgresql 8.4

Hi,

I have posted this first to the eclipselink-user s list, but I am not
pretty convinced that it's not a "user error".  My original e-mail is
below.  After some more testing and changes, I still have inconsistent
operation where the program sometimes succeeds, while other times the
duplicate assignments occurs.  When I compare the logs from failing
and successful runs with eclipselink.logging.level set to ALL, I
cannot discern anything differences in what's logged until the moment
the error occurs.  Are there any suggestions on what I might look at
to find what might be causing the discrepant behavior?

Thanks,
Joseph


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.myco.modules.advertiser.domain.repository.impl.AccountingProviderImpl.chargeAccountForDate(AccountingProviderImpl.java:168)

                at
com.myco.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)

Caused by: org.postgresql.util.PSQLException: ERROR: multiple
assignments to same column "charged_value"

                at
org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:1592)

                at
org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1327)

                at
org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:192)

                at
org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:451)

                at
org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:350)

                at
org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:304)

                at
org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeDirectNoSelect(DatabaseAccessor.java:788)

                ... 54 more


Back to the top