在运行时更改休眠 JPA 属性
Change hibernate JPA properties at runtime
我通常使用 persistence.xml 通过
这样的属性来配置休眠
<properties>
<property name="javax.persistence.lock.timeout" value="90000"/>
<property name="javax.persistence.query.timeout" value="90000" />
<property name="hibernate.dialect" value="org.hibernate.dialect.SQLServer2012Dialect" />
<!-- ... -->
但是,我需要在运行时更改一个属性(更具体地说,我需要在运行时调整javax.persistence.query.timeout
的值)。因此,我尝试在需要非默认属性的情况下手动配置会话,例如:
Configuration config = new Configuration();
config.addResource("persistence.xml");
config.setProperty("javax.persistence.query.timeout", "100000");
Session session = config.buildSessionFactory().getCurrentSession();
但是,这会产生以下异常:
org.hibernate.boot.MappingNotFoundException: Mapping (RESOURCE) not found : persistence.xml : origin(persistence.xml)
这是有道理的,因为 persistence.xml 不是普通的休眠资源文件。那么如何在persistenc.xml的基础上进行配置呢(我不想把所有的属性都配置两次)?或者更一般地说,我如何在运行时重新配置休眠?
请注意,这与 this post.
相似,但不重复(因为它更具体)
每个查询可以 overridden/set:
query.setHint("javax.persistence.query.timeout", 5000); // 5 seconds
如果您的查询对象是 org.hibernate.Query 类型,您可以:
query.setTimeout(5);
https://docs.jboss.org/hibernate/orm/3.2/api/org/hibernate/Query.html#setTimeout(int)
在运行时更改 EntityManagerFactory 中的属性(影响所有查询)不会更改生效的配置。
如果需要,您可以完全创建一个新的 EntityManagerFactory,如下所述:
Changing Persistence Unit dynamically - JPA
我通常使用 persistence.xml 通过
这样的属性来配置休眠<properties>
<property name="javax.persistence.lock.timeout" value="90000"/>
<property name="javax.persistence.query.timeout" value="90000" />
<property name="hibernate.dialect" value="org.hibernate.dialect.SQLServer2012Dialect" />
<!-- ... -->
但是,我需要在运行时更改一个属性(更具体地说,我需要在运行时调整javax.persistence.query.timeout
的值)。因此,我尝试在需要非默认属性的情况下手动配置会话,例如:
Configuration config = new Configuration();
config.addResource("persistence.xml");
config.setProperty("javax.persistence.query.timeout", "100000");
Session session = config.buildSessionFactory().getCurrentSession();
但是,这会产生以下异常:
org.hibernate.boot.MappingNotFoundException: Mapping (RESOURCE) not found : persistence.xml : origin(persistence.xml)
这是有道理的,因为 persistence.xml 不是普通的休眠资源文件。那么如何在persistenc.xml的基础上进行配置呢(我不想把所有的属性都配置两次)?或者更一般地说,我如何在运行时重新配置休眠?
请注意,这与 this post.
相似,但不重复(因为它更具体)每个查询可以 overridden/set:
query.setHint("javax.persistence.query.timeout", 5000); // 5 seconds
如果您的查询对象是 org.hibernate.Query 类型,您可以:
query.setTimeout(5);
https://docs.jboss.org/hibernate/orm/3.2/api/org/hibernate/Query.html#setTimeout(int)
在运行时更改 EntityManagerFactory 中的属性(影响所有查询)不会更改生效的配置。 如果需要,您可以完全创建一个新的 EntityManagerFactory,如下所述: Changing Persistence Unit dynamically - JPA