如何在运行时更改hibernate映射属性
我有一个实体,其中指定了lazy=“false”和batch size=“100”。它工作正常,但在其他一些场景中,我希望删除批处理大小并设置lazy=“true”。如果我更改hbm文件,则会影响其他应用程序。只有在执行hql之前,我才能更改当前会话的实体属性。是的,您可以。如何在运行时更改hibernate映射属性,hibernate,Hibernate,我有一个实体,其中指定了lazy=“false”和batch size=“100”。它工作正常,但在其他一些场景中,我希望删除批处理大小并设置lazy=“true”。如果我更改hbm文件,则会影响其他应用程序。只有在执行hql之前,我才能更改当前会话的实体属性。是的,您可以。 详情如下 您可以使用更改抓取策略。您可以在运行时通过HQL或条件查询更改抓取策略(惰性或非惰性)。 在HQL中,您可以使用fetch join初始化已联接集合的值,例如: from Cat as cat inner joi
详情如下 您可以使用更改抓取策略。您可以在运行时通过HQL或条件查询更改抓取策略(惰性或非惰性)。 在HQL中,您可以使用fetch join初始化已联接集合的值,例如:
from Cat as cat
inner join fetch cat.mate
left join fetch cat.kittens
List cats = sess.createCriteria(Cat.class)
.add( Restrictions.like("name", "Fritz%") )
.setFetchMode("mate", FetchMode.EAGER)
.setFetchMode("kittens", FetchMode.EAGER)
.list();
看
使用criteria api代替criteria查询,例如:
from Cat as cat
inner join fetch cat.mate
left join fetch cat.kittens
List cats = sess.createCriteria(Cat.class)
.add( Restrictions.like("name", "Fritz%") )
.setFetchMode("mate", FetchMode.EAGER)
.setFetchMode("kittens", FetchMode.EAGER)
.list();
Hibernate Doku:据我所知,无法动态更改批大小。您可能可以在配置时通过修改用于创建SessionFactory的配置对象来更改它。请参阅org.hibernate.cfg.Configuration.getClasses()和org.hibernate.mapping.Collection.setBatchSize()。您可以在中找到与获取有关的其他信息。