举个例子,课程(event)和分类(catalog)二者是多对多的关系,对应关系在表catalogEventBridge中,字段为[catalogID,eventID],现在做的是当查询或者修改一个catalog的时候,对应的event在bridge表中也要修改
catalogEventBridgeDAO.java和ÍeventTypeDAO.java跟上面的DAO文件类似,就不多说了。
使用起来就方便多了,只要实例化CatalogDAO,然后得到查询结果,一个catalog的集合,然后通过catalog.getCatalogEventList()的方法来就得到了一个bridge的集合。
还可以通过catalogDAO的create,update和delete方法来更新catalog同时也更新catalogEventBridge表中的数据
1.修改repository_user.xml
- <class-descriptor class="org.pie.vls.Catalog.Catalog" table="catalog">
- <field-descriptor name="catalogID" column="catalogID" jdbc-type="INTEGER" primarykey="true" />
- <field-descriptor
- name="catalogName"
- column="catalogName"
- jdbc-type="VARCHAR" />
- <collection-descriptor name="catalogEventList"
- element-class-ref="org.pie.vls.Catalog.CatalogEventBridge"
- auto-retrieve="true"
- auto-update="true"
- auto-delete="true">
- <inverse-foreignkey field-ref="catalogID"/>
- </collection-descriptor>
- </class-descriptor>
- <class-descriptor class="org.pie.vls.Catalog.CatalogEventBridge" table="catalogEventBridge">
- <field-descriptor
- name="catalogID"
- column="catalogID"
- jdbc-type="INTEGER"
- primarykey="true" />
- <field-descriptor
- name="eventTypeID"
- column="eventTypeID"
- jdbc-type="INTEGER"
- primarykey="true" />
- </class-descriptor>
- <class-descriptor
- class="org.pie.vls.EventType.EventType" table="eventType" >
- <field-descriptor
- name="eventTypeID"
- column="eventTypeID"
- jdbc-type="INTEGER"
- primarykey="true"
- autoincrement="true" />
- <field-descriptor
- name="eventTypeTitle"
- column="eventTypeTitle"
- jdbc-type="VARCHAR"
- />
- ... ...
- </class-descriptor>
2. bean文件的定义
EventType.java
- public class EventType implements Cloneable, Comparable {
- private String eventTypeTitle;
- private String eventTypeCode;
- private String eventTypeDesc;
- private int eventTypeID;
- public int getEventTypeID() {
- return this.eventTypeID;
- }
- public void setEventTypeID(int value) {
- this.eventTypeID = value;
- }
- ... ...
- }
catalog.java
- public class Catalog implements Comparable {
- private int catalogID;
- private String catalogName = "";
- private List catalogEventList = new Vector();
- /**
- * @return Returns the catalogID.
- */
- public int getCatalogID() {
- return catalogID;
- }
- /**
- * @param catalogID The catalogID to set.
- */
- public void setCatalogID(int catalogID) {
- this.catalogID = catalogID;
- }
- /**
- * @return Returns the catalogName.
- */
- public String getCatalogName() {
- return catalogName;
- }
- /**
- * @param catalogName The catalogName to set.
- */
- public void setCatalogName(String catalogName) {
- this.catalogName = catalogName;
- }
- /**
- * @return Returns the catalogEventList.
- */
- public List getCatalogEventList() {
- return catalogEventList;
- }
- /**
- * @param catalogEventList The catalogEventList to set.
- */
- public void setCatalogEventList(List catalogEventList) {
- this.catalogEventList = catalogEventList;
- }
- }
CatalogEventBridge.java
- public class CatalogEventBridge {
- private int catalogID = 0;
- private int eventTypeID = 0;
- /**
- * @return Returns the catalogID.
- */
- public int getCatalogID() {
- return catalogID;
- }
- /**
- * @param catalogID The catalogID to set.
- */
- public void setCatalogID(int catalogID) {
- this.catalogID = catalogID;
- }
- /**
- * @return Returns the eventTypeID.
- */
- public int getEventTypeID() {
- return eventTypeID;
- }
- /**
- * @param eventTypeID The eventTypeID to set.
- */
- public void setEventTypeID(int eventTypeID) {
- this.eventTypeID = eventTypeID;
- }
- }
3. DAO文件
- import java.util.Collection;
- import java.util.Iterator;
- import org.apache.log4j.Logger;
- import org.apache.ojb.broker.PersistenceBroker;
- import org.apache.ojb.broker.PersistenceBrokerFactory;
- import org.apache.ojb.broker.query.Criteria;
- import org.apache.ojb.broker.query.QueryByCriteria;
- import org.apache.ojb.broker.query.QueryFactory;
- import org.odmg.Implementation;
- import org.pie.vls.Application.AbstractVLSBase;
- public class CatalogDAO extends AbstractVLSBase {
- private Collection catalogList;
- private PersistenceBroker broker;
- private static final Logger logger = Logger.getLogger(Catalog.class);
- private int catalogID = 0;
- public CatalogDAO(Implementation impl) {
- super(impl);
- init();
- }
- public CatalogDAO(Implementation impl, int catalogID) {
- super(impl);
- this.catalogID = catalogID;
- init();
- }
- /* (non-Javadoc)
- * @see org.pie.vls.Application.VLSBase#init()
- */
- public void init() {
- // TODO Auto-generated method stub
- try {
- broker = PersistenceBrokerFactory.defaultPersistenceBroker();
- broker.clearCache();
- Criteria crit = new Criteria();
- if (this.catalogID > 0) {
- crit.addEqualTo("catalogID", new Integer(this.catalogID));
- }
- QueryByCriteria tquery = QueryFactory.newQuery(Catalog.class, crit);
- this.catalogList = broker.getCollectionByQuery(tquery);
- broker.clearCache();
- broker.close();
- } catch (Throwable t) {
- logger.error(t.getMessage(), t);
- }
- }
- public boolean isEmpty(){
- return this.catalogList.isEmpty();
- }
- public Collection getCatalogList() {
- return this.catalogList;
- }
- public Catalog getCatalog() {
- Iterator iter = this.catalogList.iterator();
- Catalog catalog = (Catalog) iter.next();
- return catalog;
- }
- public void create(Catalog catalog) {
- update(catalog);
- }
- public void update(Catalog catalog) {
- try {
- broker = PersistenceBrokerFactory.defaultPersistenceBroker();
- broker.clearCache();
- broker.beginTransaction();
- broker.store(catalog);
- broker.commitTransaction();
- broker.close();
- } catch (Throwable t) {
- logger.error(t.getMessage(), t);
- }
- }
- public void delete(Catalog catalog) {
- try {
- broker = PersistenceBrokerFactory.defaultPersistenceBroker();
- broker.clearCache();
- broker.beginTransaction();
- broker.delete(catalog);
- broker.commitTransaction();
- broker.close();
- } catch (Throwable t) {
- logger.error(t.getMessage(), t);
- }
- }
- }
catalogEventBridgeDAO.java和ÍeventTypeDAO.java跟上面的DAO文件类似,就不多说了。
使用起来就方便多了,只要实例化CatalogDAO,然后得到查询结果,一个catalog的集合,然后通过catalog.getCatalogEventList()的方法来就得到了一个bridge的集合。
还可以通过catalogDAO的create,update和delete方法来更新catalog同时也更新catalogEventBridge表中的数据