JPA在刷新之前为子实体分配ID

时间:2013-03-15 17:35:25

标签: java jpa openjpa unit-of-work

我有一个父实体,负责创建它所拥有的子实体(单向,一对多)。在DDD术语中,它是聚合根。当我从托管父实体创建一个新的子实体时,我想生成一个孩子的ID。我正在使用OpenJPA的uuid-hex ID生成策略,所以我不需要刷新才能获得ID。

我正在使用“每个http请求的工作单元”模式。当实体管理器在请求结束时刷新时,子节点将持久保存其新ID;但是,我需要比这更早的孩子的ID,所以我可以将它包含在http响应中。

<! -- CHILD -->
<entity name="DashboardInstance" class="DashboardInstance" access="FIELD">
    <table name="OZP_DASHBOARD_INSTANCE"/>
    <attributes>
        ...
        <many-to-one name="dashboardTemplate" target-entity="DashboardTemplate" fetch="LAZY">
            <join-column name="DASHBOARD_TEMPLATE_ID" referenced-column-name="ID" column-definition="VARCHAR(256)"/>
        </many-to-one>
    </attributes>
</entity>

<!-- PARENT -->
<entity name="Person" class="Person" access="FIELD">
    <table name="OZP_PERSON"/>
    <attributes>
        ...
        <one-to-many name="mutableDashboards" target-entity="DashboardInstance" fetch="LAZY" orphan-removal="true">
            <join-table name="OZP_PERSON_DASH_INSTANCE">
                <join-column name="PERSON_ID" referenced-column-name="ID" column-definition="VARCHAR(256)"/>
                <inverse-join-column name="DASHBOARD_INSTANCE_ID" referenced-column-name="ID" column-definition="VARCHAR(256)"/>
            </join-table>
            <cascade>
                <cascade-all />
            </cascade>
        </one-to-many>
    </attributes>
</entity>

0 个答案:

没有答案