我有一个父实体,负责创建它所拥有的子实体(单向,一对多)。在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>