提问者:小点点

在运行时更改hibernate JPA属性


我通常使用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的值)。 因此,我尝试在需要非默认属性的情况下手动配置会话,如下所示:

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?

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


共1个答案

匿名用户

每个查询都可以重写/设置:

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

还有一个hibernate特定的:

query.setHint("org.hibernate.timeout", 5000);