Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在运行时更改hibernate映射属性_Hibernate - Fatal编程技术网

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

如何在运行时更改hibernate映射属性,hibernate,Hibernate,我有一个实体,其中指定了lazy=“false”和batch size=“100”。它工作正常,但在其他一些场景中,我希望删除批处理大小并设置lazy=“true”。如果我更改hbm文件,则会影响其他应用程序。只有在执行hql之前,我才能更改当前会话的实体属性。是的,您可以。 详情如下 您可以使用更改抓取策略。您可以在运行时通过HQL或条件查询更改抓取策略(惰性或非惰性)。 在HQL中,您可以使用fetch join初始化已联接集合的值,例如: from Cat as cat inner joi

我有一个实体,其中指定了lazy=“false”和batch size=“100”。它工作正常,但在其他一些场景中,我希望删除批处理大小并设置lazy=“true”。如果我更改hbm文件,则会影响其他应用程序。只有在执行hql之前,我才能更改当前会话的实体属性。

是的,您可以。

详情如下

您可以使用更改抓取策略。

您可以在运行时通过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()。您可以在中找到与获取有关的其他信息。