You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@tuscany.apache.org by Sam Su <su...@gmail.com> on 2007/01/26 09:14:34 UTC

A big bug in one to many relationship?

/******************schema xsd*****************************/

<xsd:complexType name="Service">
    <xsd:sequence>
      <xsd:element name="serviceId" type="xsd:decimal"/>
      <xsd:element name="name" type="xsd:string"/>
      <xsd:element name="available" type="xsd:string"/>
      <xsd:element maxOccurs="unbounded" name="roles"
type="this:Role"/>
    </xsd:sequence>
  </xsd:complexType>
    <xsd:complexType name="Role">
    <xsd:sequence>
      <xsd:element name="roleId" type="xsd:decimal"/>
      <xsd:element name="serviceId" type="xsd:decimal"/>
      <xsd:element name="name" type="xsd:string"/>
      <xsd:element name="available" type="xsd:string"/>
    </xsd:sequence>
  </xsd:complexType>

/**************configuration file ********************/

  <Command name="qryAllServices" SQL="select CCP_SERVICE.SERVICE_ID,
CCP_SERVICE.NAME,CCP_SERVICE.AVAILABLE,CCP_ROLE.ROLE_ID,CCP_ROLE.NAME,CCP_ROLE.AVAILABLE
from CCP_SERVICE INNER JOIN CCP_ROLE on
CCP_SERVICE.SERVICE_ID=CCP_ROLE.SERVICE_ID" kind="Select">
      <ResultDescriptor columnName="SERVICE_ID" tableName="CCP_SERVICE"
columnType="commonj.sdo.Decimal"/>
       <ResultDescriptor columnName="NAME" tableName="CCP_SERVICE"
columnType="commonj.sdo.String"/>
       <ResultDescriptor columnName="AVAILABLE" tableName="CCP_SERVICE"
columnType="commonj.sdo.String"/>
      <ResultDescriptor columnName="ROLE_ID" tableName="CCP_ROLE"
columnType="commonj.sdo.Decimal"/>
       <ResultDescriptor columnName="NAME" tableName="CCP_ROLE" columnType="
commonj.sdo.String"/>
       <ResultDescriptor columnName="AVAILABLE" tableName="CCP_ROLE"
columnType="commonj.sdo.String"/>
    </Command>

 <Table tableName="CCP_SERVICE" typeName="Service">
        <Column columnName="SERVICE_ID" propertyName="serviceId"
primaryKey="true" />
        <Column columnName="NAME" propertyName="name"/>
        <Column columnName="AVAILABLE"
propertyName="available"/>
    </Table>


    <Table tableName="CCP_ROLE" typeName="Role">
        <Column columnName="ROLE_ID" propertyName="roleId"
primaryKey="true"/>
        <Column columnName="SERVICE_ID" propertyName="serviceId"/>
        <Column columnName="NAME" propertyName="name"/>
        <Column columnName="AVAILABLE"
propertyName="available"/>
    </Table>

/***************************java src code ****************************/

Connection conn=dataSource.getConnection();
            conn.setAutoCommit(false);
            DAS das=DAS.FACTORY.createDAS(new
ClassPathResource(schemaConfig).getInputStream(),conn);
            Command command=das.getCommand(commandName);
            if(param!=null) command.setParameter(1,param);
            DataObject root=command.executeQuery();
            List services=root.getList("Service");
            System.out.println(services.size());
            for(int i=0;i<services.size();i++){
                Service obj=(Service)services.get(i);
                System.out.println(obj.getServiceId());
                List roles=obj.getRoles();
                System.out.println("role size"+roles.size());
                for(int j=0;j<roles.size();j++){
                    Role role=(Role)roles.get(i);
                    System.out.println(role.getName());

                }

                 //here is add a new role into CCP_ROLE table
                Role newRole=UserFactory.INSTANCE.createRole();
                newRole.setRoleId(new BigDecimal(1));
                newRole.setName("test2322");
                newRole.setAvailable("1");
                newRole.setServiceId(new BigDecimal(14));
                roles.add(newRole);
            }

            das.applyChanges(root);

**********************************************************************
Question: CCP_SERVICE and CCP_ROLE is one to many relationship by SERVICE_ID
column. when I need to
                 add a new role of a service,  tuscany should add a new role
record into CCP_ROLE, however, it produces
a SQL:
           update CCP_SERVICE set roles = ? where SERVICE_ID = ?

My god!!!

Re: A big bug in one to many relationship?

Posted by Brent Daniel <br...@gmail.com>.
Sam,

  You need to define a relationship in your configuration:

<Relationship name="roles" primaryKeyTable="CCP_SERVICE"
foreignKeyTable="CCP_ROLE" many="true">
     <KeyPair primaryKeyColumn="SERVICE_ID" foreignKeyColumn="SERVICE_ID"/>
  </Relationship>	

Brent

On 1/26/07, Sam Su <su...@gmail.com> wrote:
> /******************schema xsd*****************************/
>
> <xsd:complexType name="Service">
>     <xsd:sequence>
>       <xsd:element name="serviceId" type="xsd:decimal"/>
>       <xsd:element name="name" type="xsd:string"/>
>       <xsd:element name="available" type="xsd:string"/>
>       <xsd:element maxOccurs="unbounded" name="roles"
> type="this:Role"/>
>     </xsd:sequence>
>   </xsd:complexType>
>     <xsd:complexType name="Role">
>     <xsd:sequence>
>       <xsd:element name="roleId" type="xsd:decimal"/>
>       <xsd:element name="serviceId" type="xsd:decimal"/>
>       <xsd:element name="name" type="xsd:string"/>
>       <xsd:element name="available" type="xsd:string"/>
>     </xsd:sequence>
>   </xsd:complexType>
>
> /**************configuration file ********************/
>
>   <Command name="qryAllServices" SQL="select CCP_SERVICE.SERVICE_ID,
> CCP_SERVICE.NAME,CCP_SERVICE.AVAILABLE,CCP_ROLE.ROLE_ID,CCP_ROLE.NAME,CCP_ROLE.AVAILABLE
> from CCP_SERVICE INNER JOIN CCP_ROLE on
> CCP_SERVICE.SERVICE_ID=CCP_ROLE.SERVICE_ID" kind="Select">
>       <ResultDescriptor columnName="SERVICE_ID" tableName="CCP_SERVICE"
> columnType="commonj.sdo.Decimal"/>
>        <ResultDescriptor columnName="NAME" tableName="CCP_SERVICE"
> columnType="commonj.sdo.String"/>
>        <ResultDescriptor columnName="AVAILABLE" tableName="CCP_SERVICE"
> columnType="commonj.sdo.String"/>
>       <ResultDescriptor columnName="ROLE_ID" tableName="CCP_ROLE"
> columnType="commonj.sdo.Decimal"/>
>        <ResultDescriptor columnName="NAME" tableName="CCP_ROLE" columnType="
> commonj.sdo.String"/>
>        <ResultDescriptor columnName="AVAILABLE" tableName="CCP_ROLE"
> columnType="commonj.sdo.String"/>
>     </Command>
>
>  <Table tableName="CCP_SERVICE" typeName="Service">
>         <Column columnName="SERVICE_ID" propertyName="serviceId"
> primaryKey="true" />
>         <Column columnName="NAME" propertyName="name"/>
>         <Column columnName="AVAILABLE"
> propertyName="available"/>
>     </Table>
>
>
>     <Table tableName="CCP_ROLE" typeName="Role">
>         <Column columnName="ROLE_ID" propertyName="roleId"
> primaryKey="true"/>
>         <Column columnName="SERVICE_ID" propertyName="serviceId"/>
>         <Column columnName="NAME" propertyName="name"/>
>         <Column columnName="AVAILABLE"
> propertyName="available"/>
>     </Table>
>
> /***************************java src code ****************************/
>
> Connection conn=dataSource.getConnection();
>             conn.setAutoCommit(false);
>             DAS das=DAS.FACTORY.createDAS(new
> ClassPathResource(schemaConfig).getInputStream(),conn);
>             Command command=das.getCommand(commandName);
>             if(param!=null) command.setParameter(1,param);
>             DataObject root=command.executeQuery();
>             List services=root.getList("Service");
>             System.out.println(services.size());
>             for(int i=0;i<services.size();i++){
>                 Service obj=(Service)services.get(i);
>                 System.out.println(obj.getServiceId());
>                 List roles=obj.getRoles();
>                 System.out.println("role size"+roles.size());
>                 for(int j=0;j<roles.size();j++){
>                     Role role=(Role)roles.get(i);
>                     System.out.println(role.getName());
>
>                 }
>
>                  //here is add a new role into CCP_ROLE table
>                 Role newRole=UserFactory.INSTANCE.createRole();
>                 newRole.setRoleId(new BigDecimal(1));
>                 newRole.setName("test2322");
>                 newRole.setAvailable("1");
>                 newRole.setServiceId(new BigDecimal(14));
>                 roles.add(newRole);
>             }
>
>             das.applyChanges(root);
>
> **********************************************************************
> Question: CCP_SERVICE and CCP_ROLE is one to many relationship by SERVICE_ID
> column. when I need to
>                  add a new role of a service,  tuscany should add a new role
> record into CCP_ROLE, however, it produces
> a SQL:
>            update CCP_SERVICE set roles = ? where SERVICE_ID = ?
>
> My god!!!
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-user-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-user-help@ws.apache.org