ojb的文章实在是少的可怜,自己总结了一下一些重点的内容。想到哪里写到哪里吧
比如有课程(event)和类别(catalog)两张表,二者是多对多的关系,关系表叫做catalogeventbridge,字段为[catalogid,eventid],现在要做的是一旦查询出一个catalog,就要把相关的event也全部搜索出来。
catalogeventbridgedao.java和eventtypedao.java跟上面的这个dao类似,就不再重复。
使用方法就很简单了,只要通过catalogdao得到了一个catalog的实例,那么就可以通过catalog.getcatalogeventlist()来获得bridge表中相关的数据,同样,调用catalogdao中的create,update和delete方法,不仅对catalog表作操作,同样也对catalogeventbridge表中的数据作操作。
比如有课程(event)和类别(catalog)两张表,二者是多对多的关系,关系表叫做catalogeventbridge,字段为[catalogid,eventid],现在要做的是一旦查询出一个catalog,就要把相关的event也全部搜索出来。
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表中的数据作操作。
闽公网安备 35060202000074号