gpt4 book ai didi

java - Apache Cayenne 多对多关系

转载 作者:行者123 更新时间:2023-12-01 15:30:18 25 4
gpt4 key购买 nike

我是 Apache Cayenne 的新手。

我只有一个实体,称为产品。该实体与其自身具有多对多的关系,即一个产品可以包含产品,也可以被其他产品包含。

我无法模拟与卡宴的这种关系..我所做的是:1) 我创建一个名为 Composition 的表,其中有两个字段,分别是 PK 和 FK。2)我创建了两个从 Product 到 Composition 的 toMany (一个从 Product.id 到 Composition.contained_id,一个从 Product.id 到 Composition.base_id)这应该与数据库一起使用现在我只创建一个 ObjEntity:Product。但是..我怎样才能建立扁平化的关系?我正在关注这个:http://cayenne.apache.org/doc/cayennemodeler-flattened-relationships.html但也许因为它与其自身有关系,所以我无法在“目标”组合框中选择实体..

谢谢弗朗西斯科

编辑:如果两个实体不同,也存在目标复选框问题。 Cayenne Modeler v.3.0.2

最佳答案

当您选择第一个关系时,“目标”组合为空,因为连接表没有 ObjEntity。但如果您继续选择下一个路径组件,“产品”将出现在组合框中。我希望我们重新设计这个用户界面以使其更加清晰,但它现在仍然有效。请参阅下面的 DataMap XML 示例。我刚刚使用 3.0.2 Modeler 创建了它。

希望这有帮助。

<?xml version="1.0" encoding="utf-8"?>
<data-map xmlns="http://cayenne.apache.org/schema/3.0/modelMap"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://cayenne.apache.org/schema/3.0/modelMap http://cayenne.apache.org/schema/3.0/modelMap.xsd"
project-version="3.0.0.1">
<db-entity name="composition">
<db-attribute name="BASE_ID" type="INTEGER" isPrimaryKey="true" isMandatory="true"/>
<db-attribute name="CONTAINED_ID" type="INTEGER" isPrimaryKey="true" isMandatory="true"/>
</db-entity>
<db-entity name="product">
<db-attribute name="ID" type="INTEGER" isPrimaryKey="true" isMandatory="true"/>
<db-attribute name="NAME" type="VARCHAR" length="255"/>
</db-entity>
<obj-entity name="Product" dbEntityName="product">
<obj-attribute name="name" type="java.lang.String" db-attribute-path="NAME"/>
</obj-entity>
<db-relationship name="base" source="composition" target="product" toMany="false">
<db-attribute-pair source="BASE_ID" target="ID"/>
</db-relationship>
<db-relationship name="contained" source="composition" target="product" toMany="false">
<db-attribute-pair source="CONTAINED_ID" target="ID"/>
</db-relationship>
<db-relationship name="base" source="product" target="composition" toDependentPK="true" toMany="true">
<db-attribute-pair source="ID" target="BASE_ID"/>
</db-relationship>
<db-relationship name="contained" source="product" target="composition" toDependentPK="true" toMany="true">
<db-attribute-pair source="ID" target="CONTAINED_ID"/>
</db-relationship>
<obj-relationship name="base" source="Product" target="Product" deleteRule="Deny" db-relationship-path="contained.base"/>
<obj-relationship name="contained" source="Product" target="Product" deleteRule="Deny" db-relationship-path="base.contained"/>
</data-map>

关于java - Apache Cayenne 多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9605168/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com