我有一个基本结构。一个 User 对象和一个 UserDetails 对象。User表有身份主键生成UserId,然后我还想为这个UserId保存一个UserDetails对象。单独执行此操作会很容易,但我正在尝试找到一种方法,如果我可以一次性完成,因为 User 类包含对 UserDetails 对象的引用。例如
用户 u = new User() { Name="me", Age=17, UserDetails = new UserDetails() { Detail1 = 1 } };
所以我所要做的就是传递用户对象,然后它包含对其他相关子信息的基于对象的引用(我在这个例子中大大简化了它,但是还有几个类似的类作为 UserDetails,比如 UserMatchConfiguration 等等每个字段的数量)
我希望能够在代码中构建对象,或者让它传递和修改,然后在父 User 对象上调用 save,然后保存所有相关对象。到目前为止,我已经使用一对一映射和保存级联实现了这一点,但问题是当您创建一个新对象时,当我希望它首先保存 User 类时,所有相关类的 UserId 设置为零,然后将生成的 UserId 传播到所有相关类,然后保存它们。
映射如下。
<class name="User" table="[User]">
<id name="UserId" unsaved-value="0">
<generator class="identity" />
</id>
<property name="FirstName" />
<property name="LastName" />
<property name="EmailAddress" />
<property name="DateOfBirth" />
<property name="Gender" />
<property name="PostcodePartOne" />
<property name="PostcodePartTwo" />
<many-to-one name="UserLocation" column="UserLocationId" />
<property name="DateJoined" />
<property name="LastLoggedOn" />
<property name="Status"/>
<property name="StatusNotes" />
<bag name="Photos" order-by="DisplayOrder asc" inverse="true" lazy="false" cascade="all">
<key column="UserId" />
<one-to-many class="UserPhoto" />
</bag>
<bag name="Interests" inverse="true" lazy="false" cascade="all">
<key column="UserId" />
<one-to-many class="UserMatchInterest" />
</bag>
<bag name="Preferences" inverse="true" lazy="false" cascade="all">
<key column="UserId" />
<one-to-many class="UserPreference" />
</bag>
<one-to-one name="Profile" class="UserProfile" cascade="save-update" />
<one-to-one name="MatchCriteria" class="UserMatchCriteria" />
<one-to-one name="MatchLifestyle" class="UserMatchLifestyle" />
<property name="LastUpdated" />
</class>
如您所见,我现在仅使用 Profile 对象对其进行试用,以尝试使其正常工作。我怎样才能拥有它以便首先保存主用户对象,然后将 UserId 传递给其他类,因为它们都将其用作主键?
我再次无法进行级联保存,然后在每个子类上手动设置 UserId 并分别保存它们,但我试图在一次调用中完成。