The most basic example assumes a table representing a person. It has two data columns, `firstName' and `lastName', both of type string. Additionally, it has an integer primary key column (implicitly named `id') that is fed from a database sequence `Seq_Person'.
Class definition in the meta-data file:
<class name="Person"> <idField sequenceName="Seq_Person" /> <field name="firstName" schemaName="first_name"> <string size="128" /> </field> <field name="lastName" schemaName="last_name"> <string size="128" /> </field> </class>
The table definition for our RDBMS system (PostgreSQL in this case) looks like this:
CREATE SEQUENCE Seq_Person; CREATE TABLE Person ( id INTEGER CONSTRAINT nn_Person_id NOT NULL, CONSTRAINT pk_Person PRIMARY KEY(id), first_name VARCHAR(64) CONSTRAINT nn_Person_first_name NOT NULL, last_name VARCHAR(64) CONSTRAINT nn_Person_last_name NOT NULL );
Now to application's view on this table and its rows. First, create our object container `cnt' on top of the database connection `conn' and start a transaction:
cnt = new PostgreSQLContainer(conn); cnt.beginTransaction();
Add an object to the database table `Person':
person = new Person("Michael", "van Acken"); cnt.makePersistent(person); person.store();
Retrieve all `Person' objects from the corresponding table:
q = cnt.newQuery(); q.addTableExpr(Person.cdeclPerson, false); res = q.execute();
At this place, `res[0][0]' holds the first object, `res[1][0]' the second, and so on. To retrieve a subset of all persons matching a particular pattern, one needs to add a filter predicate to the query:
q = cnt.newQuery(); q.addTableExpr(Person.cdeclPerson, false); q.addConj(Predicate.like(new Member(0, Person.attrFirstName), new Literal("Mich%"))); res = q.execute();
This returns all `Person' objects whose first name begins with `Mich'.
Removing a table row:
person.delete(); person.store();
And finally, closing the transaction:
cnt.commitTransaction();