OJB中的多表查询和更新

举个例子,课程(event)和分类(catalog)二者是多对多的关系,对应关系在表catalogEventBridge中,字段为[catalogID,eventID],现在做的是当查询或者修改一个catalog的时候,对应的event在bridge表中也要修改

1.修改repository_user.xml



  1. <class-descriptor class="org.pie.vls.Catalog.Catalog" table="catalog"
  2. <field-descriptor name="catalogID" column="catalogID" jdbc-type="INTEGER" primarykey="true" /> 
  3.     <field-descriptor 
  4.     name="catalogName" 
  5.     column="catalogName" 
  6.     jdbc-type="VARCHAR" /> 
  7.     <collection-descriptor name="catalogEventList" 
  8.     element-class-ref="org.pie.vls.Catalog.CatalogEventBridge" 
  9.     auto-retrieve="true" 
  10.     auto-update="true" 
  11.     auto-delete="true"
  12.     <inverse-foreignkey field-ref="catalogID"/> 
  13.     </collection-descriptor> 
  14. </class-descriptor> 
  15.  
  16. <class-descriptor class="org.pie.vls.Catalog.CatalogEventBridge" table="catalogEventBridge"
  17.     <field-descriptor 
  18.     name="catalogID" 
  19.     column="catalogID" 
  20.     jdbc-type="INTEGER" 
  21.     primarykey="true" /> 
  22.  
  23.     <field-descriptor 
  24.     name="eventTypeID" 
  25.     column="eventTypeID" 
  26.     jdbc-type="INTEGER" 
  27.     primarykey="true" /> 
  28.     </class-descriptor> 
  29.  
  30.     <class-descriptor 
  31.     class="org.pie.vls.EventType.EventType" table="eventType" > 
  32.     <field-descriptor 
  33.     name="eventTypeID" 
  34.     column="eventTypeID" 
  35.     jdbc-type="INTEGER" 
  36.     primarykey="true" 
  37.     autoincrement="true" />
  38.  
  39.     <field-descriptor
  40.          name="eventTypeTitle"
  41.          column="eventTypeTitle"
  42.          jdbc-type="VARCHAR"
  43.       />
  44. ... ...
  45. </class-descriptor>


2. bean文件的定义



EventType.java

  1. public class EventType implements CloneableComparable {
  2.     private String eventTypeTitle;
  3.     private String eventTypeCode;
  4.     private String eventTypeDesc;
  5.     private int eventTypeID;
  6.     public int getEventTypeID() {
  7.         return this.eventTypeID;
  8.     }
  9.  
  10.     public void setEventTypeID(int value) {
  11.         this.eventTypeID = value;
  12.     }
  13.     ... ...
  14. }


catalog.java

  1. public class Catalog implements Comparable {
  2.  
  3.     private int catalogID;
  4.     private String catalogName = "";
  5.     private List catalogEventList = new Vector();
  6.    /**
  7.      * @return Returns the catalogID.
  8.      */
  9.     public int getCatalogID() {
  10.         return catalogID;
  11.     }
  12.  
  13.     /**
  14.      * @param catalogID The catalogID to set.
  15.      */
  16.     public void setCatalogID(int catalogID) {
  17.         this.catalogID = catalogID;
  18.     }
  19.  
  20.     /**
  21.      * @return Returns the catalogName.
  22.      */
  23.     public String getCatalogName() {
  24.         return catalogName;
  25.     }
  26.  
  27.     /**
  28.      * @param catalogName The catalogName to set.
  29.      */
  30.     public void setCatalogName(String catalogName) {
  31.         this.catalogName = catalogName;
  32.     }
  33.  
  34.     /**
  35.      * @return Returns the catalogEventList.
  36.      */
  37.     public List getCatalogEventList() {
  38.         return catalogEventList;
  39.     }
  40.  
  41.     /**
  42.      * @param catalogEventList The catalogEventList to set.
  43.      */
  44.     public void setCatalogEventList(List catalogEventList) {
  45.         this.catalogEventList = catalogEventList;
  46.     }
  47. }


CatalogEventBridge.java

  1. public class CatalogEventBridge {
  2.     private int catalogID = 0;
  3.     private int eventTypeID = 0;
  4.     /**
  5.      * @return Returns the catalogID.
  6.      */
  7.     public int getCatalogID() {
  8.         return catalogID;
  9.     }
  10.  
  11.     /**
  12.      * @param catalogID The catalogID to set.
  13.      */
  14.     public void setCatalogID(int catalogID) {
  15.         this.catalogID = catalogID;
  16.     }
  17.  
  18.     /**
  19.      * @return Returns the eventTypeID.
  20.      */
  21.     public int getEventTypeID() {
  22.         return eventTypeID;
  23.     }
  24.  
  25.     /**
  26.      * @param eventTypeID The eventTypeID to set.
  27.      */
  28.     public void setEventTypeID(int eventTypeID) {
  29.         this.eventTypeID = eventTypeID;
  30.     }
  31. }


3. DAO文件


  1. import java.util.Collection;
  2. import java.util.Iterator;
  3.  
  4. import org.apache.log4j.Logger;
  5. import org.apache.ojb.broker.PersistenceBroker;
  6. import org.apache.ojb.broker.PersistenceBrokerFactory;
  7. import org.apache.ojb.broker.query.Criteria;
  8. import org.apache.ojb.broker.query.QueryByCriteria;
  9. import org.apache.ojb.broker.query.QueryFactory;
  10. import org.odmg.Implementation;
  11. import org.pie.vls.Application.AbstractVLSBase;
  12.  
  13. public class CatalogDAO extends AbstractVLSBase {
  14.  
  15.     private Collection catalogList;
  16.     private PersistenceBroker broker;
  17.     private static final Logger logger = Logger.getLogger(Catalog.class);
  18.     private int catalogID = 0;
  19.  
  20.     public CatalogDAO(Implementation impl) {
  21.         super(impl);
  22.         init();
  23.     }
  24.  
  25.     public CatalogDAO(Implementation impl, int catalogID) {
  26.         super(impl);
  27.         this.catalogID = catalogID;
  28.         init();
  29.     }
  30.  
  31.     /* (non-Javadoc)
  32.      * @see org.pie.vls.Application.VLSBase#init()
  33.      */
  34.     public void init() {
  35.         // TODO Auto-generated method stub
  36.         try {
  37.             broker = PersistenceBrokerFactory.defaultPersistenceBroker();
  38.             broker.clearCache();
  39.  
  40.             Criteria crit = new Criteria();
  41.             if (this.catalogID > 0) {
  42.                 crit.addEqualTo("catalogID"new Integer(this.catalogID));
  43.             }
  44.  
  45.             QueryByCriteria tquery = QueryFactory.newQuery(Catalog.class, crit);
  46.             this.catalogList = broker.getCollectionByQuery(tquery);
  47.             broker.clearCache();
  48.             broker.close();
  49.         } catch (Throwable t) {
  50.             logger.error(t.getMessage(), t);
  51.         }
  52.     }
  53.     
  54.     public boolean isEmpty(){
  55.         return this.catalogList.isEmpty();
  56.     }
  57.  
  58.     public Collection getCatalogList() {
  59.         return this.catalogList;
  60.     }
  61.  
  62.     public Catalog getCatalog() {
  63.         Iterator iter = this.catalogList.iterator();
  64.         Catalog catalog = (Catalog) iter.next();
  65.         return catalog;
  66.     }
  67.  
  68.     public void create(Catalog catalog) {
  69.         update(catalog);
  70.     }
  71.  
  72.     public void update(Catalog catalog) {
  73.         try {
  74.             broker = PersistenceBrokerFactory.defaultPersistenceBroker();
  75.             broker.clearCache();
  76.             broker.beginTransaction();
  77.             broker.store(catalog);
  78.             broker.commitTransaction();
  79.             broker.close();
  80.         } catch (Throwable t) {
  81.             logger.error(t.getMessage(), t);
  82.         }
  83.     }
  84.  
  85.     public void delete(Catalog catalog) {
  86.         try {
  87.             broker = PersistenceBrokerFactory.defaultPersistenceBroker();
  88.             broker.clearCache();
  89.             broker.beginTransaction();
  90.             broker.delete(catalog);
  91.             broker.commitTransaction();
  92.             broker.close();
  93.         } catch (Throwable t) {
  94.             logger.error(t.getMessage(), t);
  95.         }
  96.     }
  97. }



catalogEventBridgeDAO.java和ÍeventTypeDAO.java跟上面的DAO文件类似,就不多说了。

使用起来就方便多了,只要实例化CatalogDAO,然后得到查询结果,一个catalog的集合,然后通过catalog.getCatalogEventList()的方法来就得到了一个bridge的集合。
还可以通过catalogDAO的create,update和delete方法来更新catalog同时也更新catalogEventBridge表中的数据 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值