Hi Riccardo,

I may have completely misunderstood your intention, but here is my first
cut for a model:

cayenne-o2o.xml:
<?xml version="1.0" encoding="utf-8"?>
<domain xmlns="http://cayenne.apache.org/schema/10/domain";
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
xsi:schemaLocation="http://cayenne.apache.org/schema/10/domain
https://cayenne.apache.org/schema/10/domain.xsd";
project-version="10">
<map name="datamap"/>
</domain>

datamap.map.xml:
<?xml version="1.0" encoding="utf-8"?>
<data-map xmlns="http://cayenne.apache.org/schema/10/modelMap";
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
xsi:schemaLocation="http://cayenne.apache.org/schema/10/modelMap
https://cayenne.apache.org/schema/10/modelMap.xsd";
project-version="10">
<property name="defaultLockType" value="1"/>
<property name="defaultPackage" value="org.test"/>
<db-entity name="SHIPMENT">
<db-attribute name="ID" type="BIGINT" isPrimaryKey="true" isMandatory="true"
/>
</db-entity>
<db-entity name="SHIPMENT_NUMBER">
<db-attribute name="ID" type="BIGINT" isPrimaryKey="true" isMandatory="true"
>
<info:property xmlns:info="http://cayenne.apache.org/schema/10/info"; name=
"comment" value="This ID is the same as SHIPMENT&apos;s ID."/>
</db-attribute>
<db-attribute name="NUM" type="INTEGER">
<info:property xmlns:info="http://cayenne.apache.org/schema/10/info"; name=
"comment" value="This is the shipment number."/>
</db-attribute>
</db-entity>
<obj-entity name="Shipment" className="org.test.Shipment" lock-type=
"optimistic" dbEntityName="SHIPMENT"/>
<obj-entity name="ShipmentNumber" className="org.test.ShipmentNumber"
lock-type="optimistic" dbEntityName="SHIPMENT_NUMBER">
<obj-attribute name="num" type="java.lang.Integer" db-attribute-path="NUM"/>
</obj-entity>
<db-relationship name="toShipNum" source="SHIPMENT" target="SHIPMENT_NUMBER"
>
<db-attribute-pair source="ID" target="ID"/>
</db-relationship>
<db-relationship name="toShip" source="SHIPMENT_NUMBER" target="SHIPMENT"
toDependentPK="true">
<db-attribute-pair source="ID" target="ID"/>
</db-relationship>
<obj-relationship name="toShipNum" source="Shipment" target="ShipmentNumber"
deleteRule="Cascade" db-relationship-path="toShipNum"/>
<obj-relationship name="toShip" source="ShipmentNumber" target="Shipment"
deleteRule="Deny" db-relationship-path="toShip"/>
</data-map>

Copy/Paste these files somewhere, then try loading them up into your 4.2
Modeler and see if it is close.

mrg


On Tue, Jan 9, 2024 at 9:54 AM Riccardo De Menna <deme...@tuorlo.net> wrote:

> Hi,
>
> Can someone help me understand something?
>
> I’m trying to model a one-to-one relationship between two entities but I
> can’t seem to get the relationship to be optional.
>
> In my specific case I need to model an entity representing shipments with
> a postal service. Each shipment needs to have a number taken from a
> range/group that is pre-assigned by the postal service.
>
> Thus I created a SHIPMENT_NUMBER entity with just an INTEGER attribute and
> then used that attribute to build the relationship with the SHIPMENT
> entity. Possibly with “To dep PK” as well.
>
> I want the relationship to be optional so that I can generate
> SHIPMENT_NUMBER as many as I want and populate them with the numbers
> assigned by the postal service and only later, when the real SHIPMENT is
> actually needed/created, link it with the number in a one-to-one fashion.
>
> I’m not sure why, but my class generated content always shows the
> relationship as mandatory.
>
> Coming from the WebObjects world, I'm used to a modeler that explicitly
> shows checkboxes for isMandatory on relationships like with the attributes.
> Here in Cayenne it seems that optionality is implicitly determined based on
> the design.
>
> Have I misunderstood something? Is my design flawed?
>
> Any tip is appreciated.
>
> Regards,
> Riccardo

Reply via email to