You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ojb-user@db.apache.org by Alexandre BOISSEAU <al...@ifsic.univ-rennes1.fr> on 2004/06/22 10:47:10 UTC
Creates a new Object but this object already existing.
Hi,
I have spent two days on the following problem: let a class A having an
object attribute bObj of class B. When I make an object aObj of class A
persistent and modify it, but without mofifying the bObj attribute, then
OJB tries to insert bObj into the database. As bObj already exists, JDO
fails.
Any idea on this ?
Below a full explanation of my problem.
Regards,
AB
I have a CTicket class with several attributes, including an object
attribute of CDepartment type.
First, I create and make persistent a CTicket instance. It's ok, I have
no problem.
The attribute of type CDepartment is already persistant (and previously
stored in the DB).
Next, I make changes on this CTicket instance (but I don't modify the
attribute of CDepartment type). When I commit, the CTicket is dirty
(normal!) and the PersistenceBroker makes the update.
The CTicket is normally updated in the DB.
But after this update, the OjbStoreManager tries to flush the attribute
of type CDepartment. And, of course, the insert procedure failed because
this objet is already existing.
To correct this problem, I tried to add the "auto-update=none" tag for
this attribute in my repository file.
Here is the corresponding log:
[JDO] DEBUG: OjbStoreManager.flush:
org.esupportail.portal.channels.CHelpdesk.CTicket{214}, P_DIRTY
[JDO] DEBUG: OjbStoreManager.update
[org.apache.ojb.broker.core.PersistenceBrokerImpl] DEBUG:
getObjectByIdentity org.esupportail.portal.channels.CHelpdesk.CTicket{214}
[org.apache.ojb.broker.accesslayer.StatementManager] DEBUG:
closeResources was called
[org.apache.ojb.broker.core.PersistenceBrokerImpl] DEBUG:
getObjectByIdentity
org.esupportail.portal.channels.CHelpdesk.CUser{24007583}
[org.apache.ojb.broker.core.PersistenceBrokerImpl] DEBUG:
getObjectByIdentity
org.esupportail.portal.channels.CHelpdesk.CUser{24007583}
[org.apache.ojb.broker.core.PersistenceBrokerImpl] DEBUG:
getObjectByIdentity org.esupportail.portal.channels.CHelpdesk.CDepartment{1}
[JDO] DEBUG: OjbStoreConnector.flush: connectionReadyForRelease=false
[org.apache.ojb.broker.core.PersistenceBrokerImpl] INFO: Cascade
store for this reference-descriptor (owner) was set to false.
[org.apache.ojb.broker.core.PersistenceBrokerImpl] INFO: Cascade
store for this reference-descriptor (manager) was set to false.
[org.apache.ojb.broker.core.PersistenceBrokerImpl] INFO: Cascade
store for this reference-descriptor (department) was set to false.
[org.apache.ojb.broker.core.PersistenceBrokerImpl] INFO: Cascade
store for this reference-descriptor (connectionTicket) was set to false.
[org.apache.ojb.broker.accesslayer.JdbcAccessImpl] DEBUG:
executeUpdate :
<ticket>
<id>214</id>
[...]
</ticket>
[org.apache.ojb.broker.accesslayer.JdbcAccessImpl] DEBUG:
executeUpdate: com.mysql.jdbc.PreparedStatement@39f16f: UPDATE ticket
SET
owner_id='24007583',manager_id='24007583',department_id=1,origin=1,status=1,priority=-1,scope=1,label='2eme
ticket',computer='i259p45',creation_date='2004-06-21
08:55:44',last_action_date='2004-06-22 09:00:34',ascii_history='Label:
2eme ticket\nComputer: m\'en fous\n\nC\'est mon 2eme
ti.\n\n\ndgggggggggggggg\n\n\n',connection_ticket_id=null WHERE id = 214
[org.apache.ojb.broker.accesslayer.StatementManager] DEBUG:
closeResources was called
[JDO] DEBUG: OjbStoreManager.flush:
org.esupportail.portal.channels.CHelpdesk.CDepartment{1}, P_NEW
[JDO] DEBUG: OjbStoreManager.insert
[org.apache.ojb.broker.accesslayer.JdbcAccessImpl] DEBUG:
executeInsert :
<department>
[...]
</department>
[org.apache.ojb.broker.accesslayer.JdbcAccessImpl] DEBUG:
executeInsert: com.mysql.jdbc.PreparedStatement@19d688: INSERT INTO
department (id,label,xlabel,custom_classname,url,auto_expire,visible)
VALUES (1,'IFSIC','Institut de Formation Supérieur en Informatique et
Communication.','none','http://www.ifsic.univ-rennes1.fr',5,'1')
[org.apache.ojb.broker.accesslayer.StatementManager] DEBUG:
closeResources was called
[JDO] DEBUG: OjbStoreConnector.rollback
[org.apache.ojb.broker.accesslayer.ConnectionManagerImpl] INFO:
Rollback was called, do rollback on current connection
com.mysql.jdbc.Connection@f2da21
[org.apache.ojb.broker.core.PersistenceBrokerImpl] DEBUG: PB.close
was called: org.apache.ojb.broker.core.PersistenceBrokerImpl@19d96b1
org.apache.ojb.jdori.sql.OjbStoreFatalInternalException:
org.apache.ojb.jdori.sql.OjbStoreManager.insert
NestedThrowables:
org.apache.ojb.broker.PersistenceBrokerSQLException: SQL failure
while insert object data for class
org.esupportail.portal.channels.CHelpdesk.CDepartment, PK of the given
object is [ id=1], object was
<department>
[...]
</department>, exception message is [Invalid argument value,
message from server: "Duplicata du champ '1' pour la clef 1"]
at
org.apache.ojb.jdori.sql.OjbStoreManager.insert(OjbStoreManager.java:101)
at com.sun.jdori.common.state.PersistentNew.flush(Unknown Source)
at com.sun.jdori.common.state.StateManagerImpl.flush(Unknown Source)
at
org.apache.ojb.jdori.sql.OjbStoreManager.flush(OjbStoreManager.java:304)
at com.sun.jdori.common.CacheManagerImpl.flushInstances(Unknown
Source)
at
com.sun.jdori.common.PersistenceManagerImpl.flushInstances(Unknown Source)
at com.sun.jdori.common.TransactionImpl.flushInstances(Unknown Source)
at com.sun.jdori.common.TransactionImpl.prepareFlush(Unknown Source)
at com.sun.jdori.common.TransactionImpl.commit(Unknown Source)
at
org.esupportail.portal.channels.CHelpdesk.CTicket.addNewAction(CTicket.java:570)
at
org.esupportail.portal.channels.CHelpdesk.CHelpdeskChannel.transitionTakeTicket(CHelpdeskChannel.java:1009)
at
org.esupportail.portal.channels.CHelpdesk.CHelpdeskChannel.transitionControlPanel(CHelpdeskChannel.java:493)
at
org.esupportail.portal.channels.CHelpdesk.CHelpdeskChannel.transitionAuthenticated(CHelpdeskChannel.java:374)
at
org.esupportail.portal.channels.CHelpdesk.CHelpdeskChannel.transition(CHelpdeskChannel.java:321)
at
org.esupportail.portal.channels.CJDOChannel.setRuntimeData(CJDOChannel.java:404)
at
org.jasig.portal.ChannelRenderer$Worker.run(ChannelRenderer.java:412)
at org.jasig.portal.utils.threading.Worker.run(Worker.java:88)
Caused by: org.apache.ojb.broker.PersistenceBrokerSQLException:
SQL failure while insert object data for class
org.esupportail.portal.channels.CHelpdesk.CDepartment, PK of the given
object is [ id=1], object was
<department>
[...]
</department>, exception message is [Invalid argument value,
message from server: "Duplicata du champ '1' pour la clef 1"]
at
org.apache.ojb.broker.accesslayer.JdbcAccessImpl.executeInsert(JdbcAccessImpl.java:242)
at
org.apache.ojb.broker.core.PersistenceBrokerImpl.storeToDb(PersistenceBrokerImpl.java:1620)
at
org.apache.ojb.broker.core.PersistenceBrokerImpl.store(PersistenceBrokerImpl.java:1537)
at
org.apache.ojb.broker.core.PersistenceBrokerImpl.store(PersistenceBrokerImpl.java:1493)
at
org.apache.ojb.broker.core.DelegatingPersistenceBroker.store(DelegatingPersistenceBroker.java:180)
at
org.apache.ojb.broker.core.DelegatingPersistenceBroker.store(DelegatingPersistenceBroker.java:180)
at
org.apache.ojb.jdori.sql.OjbStoreManager.insert(OjbStoreManager.java:97)
... 16 more
Caused by: java.sql.SQLException: Invalid argument value, message
from server: "Duplicata du champ '1' pour la clef 1"
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:1876)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1098)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1192)
at com.mysql.jdbc.Connection.execSQL(Connection.java:2051)
at
com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1680)
at
com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1527)
at
org.apache.ojb.broker.accesslayer.JdbcAccessImpl.executeInsert(JdbcAccessImpl.java:197)
... 22 more
NestedThrowablesStackTrace:
org.apache.ojb.broker.PersistenceBrokerSQLException: SQL failure
while insert object data for class
org.esupportail.portal.channels.CHelpdesk.CDepartment, PK of the given
object is [ id=1], object was
<department>
[...]
</department>, exception message is [Invalid argument value,
message from server: "Duplicata du champ '1' pour la clef 1"]
at
org.apache.ojb.broker.accesslayer.JdbcAccessImpl.executeInsert(JdbcAccessImpl.java:242)
at
org.apache.ojb.broker.core.PersistenceBrokerImpl.storeToDb(PersistenceBrokerImpl.java:1620)
at
org.apache.ojb.broker.core.PersistenceBrokerImpl.store(PersistenceBrokerImpl.java:1537)
at
org.apache.ojb.broker.core.PersistenceBrokerImpl.store(PersistenceBrokerImpl.java:1493)
at
org.apache.ojb.broker.core.DelegatingPersistenceBroker.store(DelegatingPersistenceBroker.java:180)
at
org.apache.ojb.broker.core.DelegatingPersistenceBroker.store(DelegatingPersistenceBroker.java:180)
at
org.apache.ojb.jdori.sql.OjbStoreManager.insert(OjbStoreManager.java:97)
at com.sun.jdori.common.state.PersistentNew.flush(Unknown Source)
at com.sun.jdori.common.state.StateManagerImpl.flush(Unknown Source)
at
org.apache.ojb.jdori.sql.OjbStoreManager.flush(OjbStoreManager.java:304)
at com.sun.jdori.common.CacheManagerImpl.flushInstances(Unknown
Source)
at
com.sun.jdori.common.PersistenceManagerImpl.flushInstances(Unknown Source)
at com.sun.jdori.common.TransactionImpl.flushInstances(Unknown Source)
at com.sun.jdori.common.TransactionImpl.prepareFlush(Unknown Source)
at com.sun.jdori.common.TransactionImpl.commit(Unknown Source)
at
org.esupportail.portal.channels.CHelpdesk.CTicket.addNewAction(CTicket.java:570)
at
org.esupportail.portal.channels.CHelpdesk.CHelpdeskChannel.transitionTakeTicket(CHelpdeskChannel.java:1009)
at
org.esupportail.portal.channels.CHelpdesk.CHelpdeskChannel.transitionControlPanel(CHelpdeskChannel.java:493)
at
org.esupportail.portal.channels.CHelpdesk.CHelpdeskChannel.transitionAuthenticated(CHelpdeskChannel.java:374)
at
org.esupportail.portal.channels.CHelpdesk.CHelpdeskChannel.transition(CHelpdeskChannel.java:321)
at
org.esupportail.portal.channels.CJDOChannel.setRuntimeData(CJDOChannel.java:404)
at
org.jasig.portal.ChannelRenderer$Worker.run(ChannelRenderer.java:412)
at org.jasig.portal.utils.threading.Worker.run(Worker.java:88)
Caused by: java.sql.SQLException: Invalid argument value, message
from server: "Duplicata du champ '1' pour la clef 1"
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:1876)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1098)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1192)
at com.mysql.jdbc.Connection.execSQL(Connection.java:2051)
at
com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1680)
at
com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1527)
at
org.apache.ojb.broker.accesslayer.JdbcAccessImpl.executeInsert(JdbcAccessImpl.java:197)
... 22 more
--
Alexandre BOISSEAU
Université de Rennes1
---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-user-help@db.apache.org