簡體   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