I'm having a problem with a very simple mapping.  I've went through all
the docs and examples, and afaik, the mappings are right. I'll provide
some context.

Database
========
create table LBRTRY_Q (UNQ_ID number(12) not null, MSG_TXT clob not /
null, STTS_CODE number(8) not null, NXT_UNQ_ID number(12));

alter table LBRTRY_Q add constraint LBRTRY_Q_PK primary key (UNQ_ID) /
using index;

create sequence LBRTRY_Q_SEQ maxvalue 999999999999 cycle;


Database And User Repositories
==============================
<jdbc-connection-descriptor

        jcd-alias="default"
        platform="Oracle9i"
        jdbc-level="2.0"
        driver="oracle.jdbc.driver.OracleDriver"
        protocol="jdbc"
        subprotocol="oracle:thin"
        dbalias="@locahost:1521:iadb"
        username="user1"
        password="user1"
        eager-release="false"
        batch-mode="false"
        useAutoCommit="0"
        ignoreAutoCommitExceptions="false"
        default-connection="true">
                
<sequence-manager
className="org.apache.ojb.broker.util.sequence.SequenceManagerNextValImpl"/>

</jdbc-connection-descriptor>


<class-descriptor
          class="com.clrstream.chr.mm.persistence.HL7Message"
          proxy="dynamic"
          table="LBRTRY_Q">

      <field-descriptor
         name="id"
         column="UNQ_ID"
         jdbc-type="INTEGER"
         primarykey="true"
         autoincrement="true"
         sequence-name="LBRTRY_Q_SEQ"/>

      <field-descriptor
         name="value"
         column="MSG_TXT"
         jdbc-type="VARCHAR"/>

      <field-descriptor
         name="status"
         column="STTS_CODE"
         jdbc-type="INTEGER"/>

      <field-descriptor
         name="nextId"
         column="NXT_UNQ_ID"
         jdbc-type="INTEGER"
         access="anonymous"/>

      <reference-descriptor
         name="next"
         class-ref="com.clrstream.chr.mm.persistence.HL7Message">
                <foreignkey field-ref="nextId"/>
      </reference-descriptor>

   </class-descriptor>


Important Bits Of The Persistent Java POJO
==========================================
public class HL7Message
{
private static int UNPROCESSED = 67;
private static int MAX_LENGTH = 1

protected int id;
protected String value = null;
protected int status = UNPROCESSED;
protected HL7Message next;

public HL7Message()
{
}

public HL7Message(String value)
{
        int messageLength = value.length();
        if (messageLength > MAX_LENGTH)
        {
                this.value = value.substring(0, MAX_LENGTH);
                this.next = new HL7Message(value.substring(MAX_LENGTH));
        }
        else
        {
                this.value = value;
        }
}

}


Important Bit Of Unit Test
==========================
broker = PersistenceBrokerFactory.defaultPersistenceBroker();
...
HL7Message msg = new HL7Message("123");
broker.beginTransaction();
broker.store(msg);
broker.commitTransaction();
Query query = new QueryByCriteria(HL7Message.class, null);
Collection results = broker.getCollectionByQuery(query);
assertTrue("Found 1 Message", results.size() == 1);
HL7Message foundMessage = (HL7Message) results.toArray()[0];
assertTrue("Recursively 3 deep", foundMessage.getNext().getNext() !=
null);


PROBLEM
=======

You can see that the table is simple a queue that breaks up a message
into 4k bits, actually for testing, simply string of length 1.  When I
broker.store(), it only creates 1 record in the database.  The WEIRD
part is that this test PASSES!!  Looking at the database, it shouldn't. 
Is there some kind of caching going on?


-- 
andy


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

Reply via email to