如何在运行时更改hibernate映射属性

时间:2011-01-04 10:05:59

标签: hibernate

我有一个实体,其中我指定了lazy =“false”和batch-size =“100”。它工作正常但在其他情况下我想删除批量-size并设置lazy =“true”。如果我更改hbm文件,那么它会影响其他应用程序。有没有什么办法可以在执行hql之前更改当前会话的实体属性。

3 个答案:

答案 0 :(得分:8)

您可以通过HQL或条件查询在运行时更改提取策略(延迟或不更改)。 在HQL中,您可以使用获取连接来初始化已连接集合的值,例如:

from Cat as cat
inner join fetch cat.mate
left join fetch cat.kittens

请参阅Hibernate Doku - 15.3. Associations and joins

使用Criteria.setFetchMode(..)条件api代替标准查询,例如:

List cats = sess.createCriteria(Cat.class)
.add( Restrictions.like("name", "Fritz%") )
.setFetchMode("mate", FetchMode.EAGER)
.setFetchMode("kittens", FetchMode.EAGER)
.list();

Hibernate Doku:16.5. Dynamic association fetching

答案 1 :(得分:2)

您可以使用Fetching Profiles更改提取策略。

答案 2 :(得分:-1)

是的,你可以。 完整的详细信息为here