根据Hibernate docs for one-to-manyxml mapping标签,有一个名为as的属性not-found
http://docs.jboss.org/hibernate/orm/3.3/reference/en-US/html/collections.html#collections-onetomany
医生说:
not-found(可选 - 默认为exception):指定如何处理引用缺失行的缓存标识符.ignore会将缺少的行视为空关联.
这个属性有什么用?我试图在Product和Parts之间创建一个映射,Product有一组零件,下面有映射细节:
<set name="parts" cascade="all">
<key column="productSerialNumber" not-null="true" />
<one-to-many class="Part" not-found="ignore"/>
</set>
Run Code Online (Sandbox Code Playgroud)
然后我写了我的Java代码:
public static void main(String[] args) {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
Product prod = (Product) session.get(Product.class, 1);
session.getTransaction().commit();
System.out.println(prod);
HibernateUtil.getSessionFactory().close();
}
Run Code Online (Sandbox Code Playgroud)
我期待我的设置为null,其中包含我在映射文件中配置的部件not-found="ignore".但我得到了常规例外 - org.hibernate.LazyInitializationException
请帮我理解这个属性的用途是什么?什么是缓存标识符?
未找到与延迟加载无关.它用于处理数据库中的不一致性.
假设您对良好的数据库实践一无所知,并且有一个order_line包含order_id列的表,应该引用order它所属的列.并且假设由于您对良好实践一无所知,因此您对此列没有外键约束.
因此,即使订单具有引用它的订单行,也可以删除订单.当使用Hibernate加载这样的OrderLine时,Hibernate将加载Order并因异常而失败,因为它应该存在,但不会.
使用not-found=ignoremake使Hibernate忽略OrderLine中的order_id,从而将order字段初始化为null.
在设计良好的数据库中,永远不应使用此属性.
| 归档时间: |
|
| 查看次数: |
5262 次 |
| 最近记录: |