Maybe I'm doing something very poor, but I thought I had used these
constructs successfully before.  (This is Oracle, BTW.)

My RESOURCE_LOCK table schema:

    <table name="RESOURCE_LOCK">
        <column name="ITEM_ID" size="27" type="DECIMAL" javaName="ItemID"/>
        <column name="RESOURCE_DESCRIPTOR" primaryKey="true"
            required="true" size="100" type="VARCHAR" 
javaName="ResourceDescriptor"/>
        <column name="ENTRY_TIMESTAMP" type="TIMESTAMP" 
javaName="EntryTimestamp"/>
        <column name="LOCKER_ID" size="27" type="DECIMAL" javaName="LockerID"/>
        <column name="LOCKER_TYPE" size="100" type="VARCHAR" 
javaName="LockerType"/>
        <column name="RESOURCE_TYPE" size="27" type="DECIMAL" 
javaName="ResourceTypeID"/>
    </table>

My code:

    Criteria crit = new Criteria();
    crit.addGroupByColumn(ResourceLockPeer.LOCKER_TYPE);
    List<ResourceLock> locks = ResourceLockPeer.doSelect(crit);

The observed SQL from log4j when turned on:

    SELECT RESOURCE_LOCK.ITEM_ID, RESOURCE_LOCK.RESOURCE_DESCRIPTOR, 
RESOURCE_LOCK.ENTRY_TIMESTAMP, RESOURCE_LOCK.LOCKER_ID, 
RESOURCE_LOCK.LOCKER_TYPE, RESOURCE_LOCK.RESOURCE_TYPE FROM DNS.RESOURCE_LOCK 
GROUP BY RESOURCE_LOCK.LOCKER_TYPE

The exception:

    org.apache.torque.TorqueException: java.sql.SQLException: ORA-00979: not a 
GROUP BY expression

DNS is the torque.database.schema, but I don't understand why it is 
inconsistent in adding the database prefix in the FROM clause but not
the GROUP clause.

Joins are similarly affected:

    Criteria crit = new Criteria();
    crit.add(ResourceLockPeer.LOCKER_ID, new Long(2115));
    crit.add(ResourceLockPeer.LOCKER_TYPE, "RECURBILLINGPROC");
    crit.addJoin(ResourceLockPeer.RESOURCE_DESCRIPTOR, RecurBillingPeer.ID);
    crit.addGroupByColumn(RecurBillingPeer.ACCOUNT_ID);
    crit.addGroupByColumn(RecurBillingPeer.ACCOUNT_PAYMENT_ID);
    List<RecurBilling> recBilling = RecurBillingPeer.doSelect(crit);

The SQL is even worse, as it contains both the tablename and dbprefix.tablename 
in the where clause, which gives Oracle confusion fits.

    SELECT <..all RECUR_BILLING fields..> FROM RESOURCE_LOCK, RECUR_BILLING, 
DNS.RECUR_BILLING, DNS.RESOURCE_LOCK WHERE 
RESOURCE_LOCK.RESOURCE_DESCRIPTOR=RECUR_BILLING.ID AND 
RESOURCE_LOCK.LOCKER_TYPE='RECURBILLINGPROC' AND RESOURCE_LOCK.LOCKER_ID=2115 
GROUP BY RECUR_BILLING.ACCOUNT_ID, RECUR_BILLING.ACCOUNT_PAYMENT_ID

Brendan

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to