Hi All
Having struggled with using a collection to hold a 1->n relationship using
the ODMG API I have come up with the following basic code (to be refactored
later).
I would appreciate any comments (especially as I would not want others to
use it if I have made errors).
Below the code is the database mappings, classes etc for absolute
transparency.
Cheers
Shane
public static void main(String[] args)
{
Implementation odmg = OJB.getInstance();
Database db = odmg.newDatabase();
try
{
db.open("default", Database.OPEN_READ_WRITE);
}
catch (ODMGException e)
{
e.printStackTrace();
}
// Create a new Distribution Channel with two products
DistributionChannel dc = new DistributionChannel("New
Channel","Swiss Bank A/c");
dc.addProduct(new Product("P1","Product One"));
dc.addProduct(new Product("P2","Product Two"));
Transaction tx = odmg.newTransaction();
tx.begin();
db.makePersistent(dc);
tx.commit();
// Update channel and products
tx.begin();
OQLQuery query = odmg.newOQLQuery();
String oql = "select all from " +
DistributionChannel.class.getName() + " where name = $1";
DList results = null;
try
{
query.create(oql);
query.bind("New Channel");
results = (DList)query.execute();
}
catch (QueryException e)
{
e.printStackTrace();
}
DistributionChannel channel = (DistributionChannel)results.get(0);
// Changing attributes to the Distribution Channel or existing
products is okay
channel.setCmaBankAccount("Name Changed");
channel.getProduct("P2").setDescription("Desc Changed");
// Add a new product to the collection and persist it to the
database
Product pNew = new Product("P3","Product Three Added");
channel.addProduct(pNew);
db.makePersistent(pNew);
// Delete a product from the collection and database
Product pDel = channel.getProduct("P1");
channel.removeProduct(pDel);
db.deletePersistent(pDel);
// Persist changes to Distribution Channel to database
db.makePersistent(channel);
tx.commit();
}
<<-- BELOW IS THE SUPPORTING INFORMATION ->>
The model is like this:
--------------------------- ---------------
| DistributionChannel | | Product |
--------------------------- ---------------
| name | <---------------- | name |
| cmabankAccount | | description |
| products | | |
--------------------------- ---------------
The mappings are like such:
<class-descriptor class="com.assureinternational.ims.model.Product"
table="product">
<field-descriptor name="name" column="name" jdbc-type="VARCHAR"
primarykey="true" />
<field-descriptor name="distributionChannelName" column="distchannelname"
jdbc-type="VARCHAR" primarykey="true" />
<field-descriptor name="description" column="description"
jdbc-type="VARCHAR"/>
</class-descriptor>
<class-descriptor
class="com.assureinternational.ims.model.DistributionChannel"
table="distributionchannel">
<field-descriptor name="name" column="name" jdbc-type="VARCHAR"
primarykey="true"/>
<field-descriptor name="cmaBankAccount" column="cmabankaccount"
jdbc-type="VARCHAR"/>
<collection-descriptor name="products"
element-class-ref="com.assureinternational.ims.model.Product" >
<inverse-foreignkey field-ref="distributionChannelName"/>
</collection-descriptor>
</class-descriptor>
The classes are like this:
package com.assureinternational.ims.model;
import java.util.Collection;
import java.util.Iterator;
import java.util.Vector;
public class DistributionChannel
{
private String name;
private String cmaBankAccount;
private Collection products = new Vector();
public DistributionChannel()
{
}
public DistributionChannel(String name, String cmaBankAccount)
{
this.name = name;
this.cmaBankAccount = cmaBankAccount;
}
public String getName()
{
return name;
}
public String getCmaBankAccount()
{
return cmaBankAccount;
}
public void setCmaBankAccount(String cmaBankAccount)
{
this.cmaBankAccount = cmaBankAccount;
}
public void addProduct(Product product)
{
this.products.add(product);
}
public Product getProduct(String name)
{
for (Iterator iterator = products.iterator(); iterator.hasNext();)
{
Product product = (Product) iterator.next();
if (product.getName().equals(name))
return product;
}
return null;
}
public void removeProduct(Product product)
{
this.products.remove(product);
}
}
package com.assureinternational.ims.model;
public class Product
{
private String distributionChannelName; // OJB
private String name;
private String description;
public Product()
{
}
public Product(String name, String description)
{
this.name = name;
this.description = description;
}
public String getName()
{
return name;
}
public String getDescription()
{
return description;
}
public void setDescription(String description)
{
this.description = description;
}
}
Shane Mingins
Analyst Programmer
Assure NZ Ltd
Ph 644 494 2522
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]