OJB中的多表查詢和更新
阿新 • • 發佈:2019-01-27
舉個例子,課程(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 , {
- private eventTypeTitle;
- private eventTypeCode;
- private eventTypeDesc;
- private int eventTypeID;
- public int getEventTypeID() {
- return this.eventTypeID;
- }
- public void setEventTypeID(int value) {
- this.eventTypeID = value;
- }
- ... ...
- }
catalog.java
- public class Catalog implements {
- private int catalogID;
- private 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 getCatalogName() {
- return catalogName;
- }
- /**
- * @param catalogName The catalogName to set.
- */
- public void setCatalogName( 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.;
- import java.util.;
- 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 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 (this.catalogID));
- }
- QueryByCriteria tquery = QueryFactory.newQuery(Catalog.class, crit);
- this.catalogList = broker.getCollectionByQuery(tquery);
- broker.clearCache();
- broker.close();
- logger.error(t.getMessage(), t);
- }
- }
- public boolean isEmpty(){
- return this.catalogList.isEmpty();
- }
- public getCatalogList() {
- return this.catalogList;
- }
- public Catalog getCatalog() {
- 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();
- 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();
- logger.error(t.getMessage(), t);
- }
- }
- }
catalogEventBridgeDAO.java和ÍeventTypeDAO.java跟上面的DAO檔案類似,就不多說了。
使用起來就方便多了,只要例項化CatalogDAO,然後得到查詢結果,一個catalog的集合,然後通過catalog.getCatalogEventList()的方法來就得到了一個bridge的集合。
還可以通過catalogDAO的create,update和delete方法來更新catalog同時也更新catalogEventBridge表中的資料