<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="org.lexiclan.orm.dao">
<class name="Address" table="ADDRESSES" lazy="false">
<id name="addressId" column="ADDRESS_ID">
<generator class="native" />
</id>
<many-to-one name="addressType" column="ADDRESS_TYPE_ID" not-null="true" class="AddressType" lazy="false" />
<many-to-one name="contact" column="CONTACT_ID" not-null="true" class="Contact" lazy="false" />
<property name="address1" column="ADDRESS_1" />
<property name="address2" column="ADDRESS_2" />
<property name="city" column="CITY" />
<property name="stateProvince" column="STATE_PROVINCE" />
<property name="zipPostalCode" column="ZIP_POSTAL_CODE" />
<property name="countryRegion" column="COUNTRY_REGION" />
</class>
</hibernate-mapping>
Run Code Online (Sandbox Code Playgroud)
在这个例子中,地址需要联系人和地址类型关系才能使用"Session.save()"(这是我想要的),但是当我想使用"Session.delete()"时,我必须由于not-null,还指定了联系人和地址类型关系.有没有办法在保存时要求这些值,而不是在更新/删除操作上?
"not-null"不是条件约束.您的属性(addressType/ contact)始终是必需的,在这种情况下,您将它们指定为not-null="true"或不是.
"有时"与"不需要"相同.如果您需要执行条件的验证(例如,在插入过程而不是更新过程中或基于其他一些实体状态),你可以先在调用会话的方法这样做在你的代码,或者你可以写一个事件侦听器或拦截器来为你而做.
也就是说,删除是一种特殊情况.session.delete()删除持久化实体,这意味着它已经过验证并且其属性为非null.如果要按id删除(即,您没有在会话中加载实体),可以使用它session.load()来获取其代理:
Address toBeDeleted = (Address) session.load(Address.class, id);
session.delete(toBeDeleted);
Run Code Online (Sandbox Code Playgroud)
无论哪种方式,我都不太清楚你的意思是"我必须指定一个联系和地址类型的关系因为非null",如果删除.你没有 - 他们已经定了; 它们是在实体持久化时指定的.
| 归档时间: |
|
| 查看次数: |
7166 次 |
| 最近记录: |