如何在XML文件格式原则ORM中添加级联参数

问题描述

据我了解,

我需要在映射中添加一个“级联”参数。但是我的映射是XML。 我发现了很多有关它的信息,但没有结果。 放心!

Мy错误是: 通过给定的关联图找到了多个非持久的新实体:\ n \ n *通过“ Domain \ Maintenance \ Maintenance#affectedRegions”关系发现了一个新实体,该关系未配置为级联实体的持久化操作:Domain \ AffectedRegion \ AffectedRegion @ 0000000075384ba200000000535ab7f1。解决此问题的方法:在此未知实体上显式调用EntityManager#persist()或配置级联,将该关联保留在映射中,例如@ManyToOne(..,cascade = {“ persist”})。如果您找不到导致问题的实体,请实施“ Domain \ AffectedRegion \ AffectedRegion #__ toString()”以获取线索。\ n *

XML失败:

<entity name="Domain\Maintenance\Maintenance" table="maintenances" repository-class="Infrastructure\Repositories\MaintenanceRepository">
    <id name="id" type="integer" column="id">
        <generator strategy="AUTO"/>
    </id>
    <field name="name" type="string"/>


    <one-to-many field="affectedRegions" target-entity="Domain\AffectedRegion\AffectedRegion" mapped-by="Domain\Maintenance\Maintenance" />
   <cascade>
            <cascade-merge/>
        </cascade>


</entity>
<entity name="Domain\AffectedRegion\AffectedRegion" table="affected_regions" repository-class="Infrastructure\Repositories\AffectedRegionRepository">
    <id name="id" type="integer" column="id">
        <generator strategy="AUTO"/>
    </id>
   
    <many-to-one field="region" target-entity="Domain\Region\Region" inversed-by="Domain\AffectedRegion\AffectedRegion">
        <join-column name="region_id" referenced-column-name="id" />
        <cascade>
            <cascade-persist/>
        </cascade>
    </many-to-one>
    
     <many-to-one field="maintenance" target-entity="Domain\Maintenance\Maintenance" inversed-by="Domain\AffectedRegion\AffectedRegion">
        <join-column name="maintenance_id" referenced-column-name="id" />
       <cascade>
            <cascade-persist/>
        </cascade>
    </many-to-one>
    

    <field name="vlans" type="string"/>
    <field name="olts" type="string"/>
   

</entity>
<entity name="Domain\Region\Region" table="regions" repository-class="Infrastructure\Repositories\RegionRepository">
    <id name="id" type="integer" column="id">
        <generator strategy="AUTO"/>
    </id>
    <field name="name" type="string"/>
    <field name="code" type="string"/>
    <one-to-many field="affectedRegions" target-entity="Domain\AffectedRegion\AffectedRegion" mapped-by="Domain\Maintenance\Maintenance" />
</entity>

这是我的FK:

    $affectedRegionTable->addForeignKeyConstraint(
        $regionTable,['region_id'],['id'],['onUpdate' => 'CASCADE'],'fk_affectedRegions_region_id'
    );

    $affectedRegionTable->addForeignKeyConstraint(
        $regionTable,['maintenance_id'],'fk_affectedRegions_maintenance_id'
    );

我想建立的关系是:

维护←一对多→受影响的区域←多对一→地区

解决方法

这是答案。 添加级联参数的另一种方法:

 <one-to-many field="affectedRegions" target-entity="Domain\AffectedRegion\AffectedRegion" mapped-by="maintenance">
        <cascade>
            <cascade-persist/>
            <cascade-remove/>
        </cascade>
    </one-to-many>

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...