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: [EMAIL PROTECTED]: 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: [EMAIL PROTECTED]: 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 [EMAIL PROTECTED] [org.apache.ojb.broker.core.PersistenceBrokerImpl] DEBUG: PB.close was called: [EMAIL PROTECTED] 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: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]



Reply via email to