You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ojb-user@db.apache.org by Chris Halverson <cd...@halverson.org> on 2003/03/18 22:22:48 UTC

Associations trouble

I'm having some problems understanding how to implement the 1:1 and
1:n mappings in OJB (1.0rc1). I'm trying to use collections and
foreignkey mappings to represent my DB. For example, it appears that
the collection in my BillingControl class does not get propogated
(debug log shows size of 0), although I am able to do simple queries
w/ Critieria (for example, the authentication is done by looking up
account_number and customer_id in billing_control). I can also get
things such as all_so_header where customer_id = ?, but I would like
it to be automatic via the repository.

Any help would be greatly appreciated. As you can see, there is
actually a few different joins needed to get things.

The DDL is below:

create table billing_control (
  account_number varchar(20) NOT NULL,
  customer_id varchar(10) NOT NULL,
  primary key (account_number)
);

create table all_so_header (
  customer_id varchar(10) not null,
  order_id varchar(10) not null,
  ckt_order varchar(20),
  end_user_name varchar(80),
  product_id varchar(6),
  desired_due_date date,
  status varchar(10),
  primary key (customer_id, order_id),
  foreign key (customer_id) references billing_control(customer_id)
);

create table ckt_order (
  order_id varchar(10) not null,
  system_id varchar(10) not null,
  ckt_ser_service_code varchar(2),
  ckt_ser_service_modifier varchar(2),
  ckt_type varchar(1),
  issue integer,
  ckt_fac_location_a varchar(11),
  ckt_fac_location_z varchar(11),
  ckt_fac_facility_type varchar(6),
  ckt_fac_designator varchar(10),
  implementation_contact varchar(40),
  ckt_ser_serial_no varchar(10),
  primary key(order_id, system_id),
  foreign key(order_id) references all_so_header(order_id)
);

create table circuit_ckt_locations (
  system_id varchar(10) not null,
  location_a varchar(11),
  location_z varchar(11),
  primary key(system_id),
  foreign key(system_id) references ckt_order(system_id)
);

create table service_code_dict (
 service_code varchar(2) not null,
 service_modifier varchar(2),
 description varchar(60),
 primary key(service_code),
 foreign key(service_code) references ckt_order(ckt_ser_service_code),
 foreign key(service_modifier) references ckt_order(ckt_ser_service_modifier)
);

My repository_user.xml is:

<class-descriptor
 class="com.enventistelecom.custportal.businessobjects.BillingControl"
 table="billing_control">

  <field-descriptor id="1"
     name="accountNumber"
     column="account_number"
     jdbc-type="VARCHAR"
     primarykey="true"
  />

  <field-descriptor id="2"
     name="customerId"
     column="customer_id"
     jdbc-type="VARCHAR"
     primary-key="true"
  />

  <collection-descriptor
    name="allSoHeaders"
    element-class-ref="com.enventistelecom.custportal.businessobjects.AllSoHeader"
  >
    <inverse-foreignkey field-ref="customerId"/>
  </collection-descriptor>

</class-descriptor>

<class-descriptor
 class="com.enventistelecom.custportal.businessobjects.AllSoHeader"
 table="all_so_header">

  <field-descriptor
     name="orderId"
     column="order_id"
     jdbc-type="VARCHAR"
     primarykey="true"
  />

  <field-descriptor
     name="cktOrder"
     column="ckt_order"
     jdbc-type="VARCHAR"
  />

  <field-descriptor
     name="customerId"
     column="customer_id"
     jdbc-type="VARCHAR"
  />

  <field-descriptor
     name="endUserName"
     column="end_user_name"
     jdbc-type="VARCHAR"
  />

  <field-descriptor
     name="productId"
     column="product_id"
     jdbc-type="VARCHAR"
  />

  <field-descriptor
     name="desiredDueDate"
     column="desired_due_date"
     jdbc-type="DATE"
  />

  <field-descriptor
     name="status"
     column="status"
     jdbc-type="VARCHAR"
  />

  <reference-descriptor
     name="customerId"
     class-ref="com.enventistelecom.custportal.businessobjects.BillingControl">
     <foreignkey field-ref="customerId"/>
  </reference-descriptor>

  <collection-descriptor
    name="allOrders"
    auto-retrieve="true"
    element-class-ref="com.enventistelecom.custportal.businessobjects.CktOrder"
  >
    <inverse-foreignkey field-ref="orderId"/>
  </collection-descriptor>

</class-descriptor>

<class-descriptor
 class="com.enventistelecom.custportal.businessobjects.CktOrder"
 table="ckt_order">

  <field-descriptor id="1"
     name="orderId"
     column="order_id"
     jdbc-type="VARCHAR"
     primarykey="true"
  />

  <field-descriptor id="2"
     name="systemId"
     column="system_id"
     jdbc-type="VARCHAR"
     primarykey="true"
  />

  <field-descriptor id="3"
     name="cktSerServiceCode"
     column="ckt_ser_service_code"
     jdbc-type="VARCHAR"
  />

  <field-descriptor id="4"
     name="cktSerServiceModifier"
     column="ckt_ser_service_modifier"
     jdbc-type="VARCHAR"
  />

  <field-descriptor id="5"
     name="cktType"
     column="ckt_type"
     jdbc-type="VARCHAR"
  />
  <field-descriptor id="6"
     name="issue"
     column="issue"
     jdbc-type="INTEGER"
  />

  <field-descriptor id="7"
     name="cktFacLocationA"
     column="ckt_fac_location_A"
     jdbc-type="VARCHAR"
  />

  <field-descriptor id="8"
     name="cktFacLocationZ"
     column="ckt_fac_location_Z"
     jdbc-type="VARCHAR"
  />

  <field-descriptor id="9"
     name="cktFacFacilityType"
     column="ckt_fac_facility_type"
     jdbc-type="VARCHAR"
  />

  <field-descriptor id="10"
     name="cktFacDesignator"
     column="ckt_fac_designator"
     jdbc-type="VARCHAR"
  />

  <field-descriptor id="11"
     name="implementationContact"
     column="implementation_contact"
     jdbc-type="VARCHAR"
  />

  <field-descriptor id="12"
     name="cktSerSerialNo"
     column="ckt_ser_serial_no"
     jdbc-type="VARCHAR"
  />

  <reference-descriptor
     name="orderId"
     class-ref="com.enventistelecom.custportal.businessobjects.AllSoHeader">
     <foreignkey field-ref="orderId"/>
  </reference-descriptor>

</class-descriptor>

<class-descriptor
 class="com.enventistelecom.custportal.businessobjects.CircuitCktLocations"
 table="circuit_ckt_locations">

  <field-descriptor id="1"
     name="systemId"
     column="system_id"
     jdbc-type="VARCHAR"
     primarykey="true"
  />

  <field-descriptor id="2"
     name="locationA"
     column="location_a"
     jdbc-type="VARCHAR"
  />

  <field-descriptor id="3"
     name="locationZ"
     column="location_z"
     jdbc-type="VARCHAR"
  />

  <reference-descriptor
     name="systemId"
     class-ref="com.enventistelecom.custportal.businessobjects.CktOrder">
     <foreignkey field-ref="orderId"/>
  </reference-descriptor>

</class-descriptor>

<class-descriptor
 class="com.enventistelecom.custportal.businessobjects.ServiceCodeDict"
 table="service_code_dict">

  <field-descriptor id="1"
     name="serviceCode"
     column="service_code"
     jdbc-type="VARCHAR"
     primarykey="true"
  />

  <field-descriptor id="2"
     name="serviceModifier"
     column="service_modifier"
     jdbc-type="VARCHAR"
  />

  <field-descriptor id="3"
     name="description"
     column="description"
     jdbc-type="VARCHAR"
  />

  <reference-descriptor
     name="serviceCode"
     class-ref="com.enventistelecom.custportal.businessobjects.CktOrder">
     <foreignkey field-ref="cktSerServiceCode"/>
  </reference-descriptor>

  <reference-descriptor
     name="serviceModifier"
     class-ref="com.enventistelecom.custportal.businessobjects.CktOrder">
     <foreignkey field-ref="cktSerServiceModifier"/>
  </reference-descriptor>

</class-descriptor>

One query I'm trying to get is obtained via:

  select ckto.ckt_ser_service_code, ckto.ckt_ser_service_modifier,
  ckto.issue, ccl.location_a, ccl.location_z, scd.description,
  ckto.implementation_contact from all_so_header so left outer join
  ckt_order ckto on so.order_id = ckto.order_id left outer join
  circuit_ckt_locations ccl on ckto.system_id = ccl.system_id left outer
  join service_code_dict scd on ckto.ckt_ser_service_code =
  scd.service_code where so.customer_id = ? and ckto.ckt_type = ?;

Thank you for any help!!

cdh

-- 
Chris D. Halverson                         http://www.halverson.org/