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