Hi,
given is a master data base and a backup data base. All entries are stored to
the master data base and to the backup.
If anything fails (computer crashes) at startup I want to merge the data from
the backup with the data of the master database.
The code I tried is like this:
masterbroker = PersistenceBrokerFactory.defaultPersistenceBroker();
ReportQueryByCriteria masterquery =
QueryFactory.newReportQuery(Transaction.class,new Criteria());
masterquery.setAttributes(new String[] {"id"});
masterquery.setDistinct(true);
Collection taids = masterbroker.getCollectionByQuery(masterquery);
log.info("Master DB has "+taids.size()+" transactions");
Criteria crit = new Criteria();
crit.addNotIn("id",taids);
backupbroker = PersistenceBrokerFactory.createPersistenceBroker(new
PBKey(jcdalias));
Query query = QueryFactory.newQuery(Transaction.class,crit);
Collection tas = backupbroker.getCollectionByQuery(query);
if (tas.size()>0) {
log.warn("Backup DB has "+tas.size()+" transactions not stored in the
master DB");
}
for (Iterator iter = tas.iterator(); iter.hasNext();) ...
The problem is when I reach the line
Collection taids = masterbroker.getCollectionByQuery(masterquery);
I get a strange exception:
org.apache.ojb.broker.PersistenceBrokerException: Unexpected error while try to
read 'ojbConcretClass' field from result set using column name CLASS_NAME main
class was de.actosoft.accept.process.Transaction
at
org.apache.ojb.broker.accesslayer.RowReaderDefaultImpl.extractOjbConcreteClass(Unknown
Source)
at
org.apache.ojb.broker.accesslayer.RowReaderDefaultImpl.readObjectArrayFrom(Unknown
Source)
at
org.apache.ojb.broker.accesslayer.RsIterator.getObjectFromResultSet(Unknown
Source)
at org.apache.ojb.broker.accesslayer.RsIterator.next(Unknown Source)
at org.apache.ojb.broker.accesslayer.ChainingIterator.next(Unknown
Source)
at
org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(Unknown
Source)
at
org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(Unknown
Source)
at
org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(Unknown
Source)
at
org.apache.ojb.broker.core.PersistenceBrokerImpl.getCollectionByQuery(Unknown
Source)
at
org.apache.ojb.broker.core.DelegatingPersistenceBroker.getCollectionByQuery(Unknown
Source)
at
org.apache.ojb.broker.core.DelegatingPersistenceBroker.getCollectionByQuery(Unknown
Source)
[...]
The strange thing is the 'ojbConcretClass' where the repository_user.xml says:
<class-descriptor
class="de.actosoft.accept.process.NullTransaction"
table="ACC_TA"
>
<field-descriptor
name="ojbConcreteClass"
column="CLASS_NAME"
jdbc-type="VARCHAR"
length="255"
>
</field-descriptor>
<field-descriptor
name="id"
column="ACC_TAID"
jdbc-type="INTEGER"
primarykey="true"
autoincrement="true"
>
[...]
The SQL generated and executed looks fine (except that it contains redundant
where clause parts):
1165921756841|-1||resultset|SELECT DISTINCT A0.ACC_TAID FROM ACC_TA A0 WHERE (
A0.CLASS_NAME IN (...)) AND (A0.CLASS_NAME IN (...)|ACC_TAID = 1
If I remove the line
masterquery.setAttributes(new String[] {"id"});
everything works fine but I get all object instances instead of just a
collection of ids.
Any hints? Is there any way to do what I want? I used db-ojb-1.0.4.jar and
MS-SQL 2000.
Mit freundlichen Grüßen
i.A. Bernd Längerich
Softwareentwicklung
act'o-soft GmbH Payment Systems
World Wide Business Center
Habichtstrasse 41
22305 Hamburg
Phone: 00 49 40 61135432
Fax: 00 49 40 61135429
Mobile: -
eMail: [EMAIL PROTECTED]
www.actosoft-payment-systems.de
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]