繁体   English   中英

在运行时更改 hibernate JPA 属性

[英]Change hibernate JPA properties at runtime

我通常使用persistence.xml来配置hibernate,通过类似的属性

<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的值)。 因此,我尝试在需要非默认属性的情况下手动配置 session,例如:

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不是普通的 hibernate 资源文件。 那么如何在persistenc.xml的基础上进行配置(我不想把所有的属性都配置两次)? 或者更一般地说,如何在运行时重新配置 hibernate?

请注意,这与这篇文章类似,但不是重复的(因为它更具体)。

每个查询都可以覆盖/设置它:

query.setHint("javax.persistence.query.timeout", 5000); // 5 seconds

如果您的查询 object 是 org.hibernate.Query 类型,您可以执行以下操作:

query.setTimeout(5);

https://docs.jboss.org/hibernate/orm/3.2/api/org/hibernate/Query.html#setTimeout(int)

在运行时更改 EntityManagerFactory 中的属性(影响所有查询)不会更改有效的配置。 如果愿意,您可以完全创建一个新的 EntityManagerFactory,如下所述: 动态更改持久性单元 - JPA

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM