簡體   English   中英

Hibernate 實體管理器在不同模式中查找表

[英]Hibernate entity manager looking for tables in different schemas

我正在 java web 項目中使用 hiberante-entity manager 實現 jpa 持久性。 我在persistence.xml 中設置了以下屬性。

<property name="hibernate.hbm2ddl.auto" value="update"/>

我為每個用戶都有一個架構。 例如,我有一個用於 user1 的架構和一個用於 user2 的架構。 如果表“ABC”存在於 user1 架構中但不存在於 user2 架構中 & 我部署應用程序並且它使用 user2 db 憑據,我會收到消息“user1.ABC”表,因此“ABC”表未在 user2 中創建架構。

當我嘗試在 persistence.xml 文件中使用以下屬性時,該表是在 user2 模式中創建的。

 <property name="hibernate.hbm2ddl.auto" value="create"/>   

我的問題是,如果應用程序使用 user2 db 憑據,為什么 hibernate 會在另一個模式中搜索,即 user1? 並且我不想在每次服務器啟動時都創建架構,所以我如何避免使用值“create”。

編輯:下面是我的 persistence.xml 文件

    <persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">
    <persistence-unit name="XXXXXX" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>

    <class>org.axonframework.saga.repository.jpa.SagaEntry</class>
    <class>org.axonframework.saga.repository.jpa.AssociationValueEntry</class>

    <properties>
        <property name="hibernate.archive.autodetection" value="class"/>
        <property name="hibernate.hbm2ddl.auto" value="update"/> 
    </properties>
</persistence-unit>
</persistence>

提前致謝

我也面臨同樣的問題,經過大量挖掘,發現該錯誤與Mysql Connector有關。 將 MySql Connector 6.0.5更改為5.1.28 后,它對我來說很好用。 我希望它可以幫助你。 干杯

這不可能。 他們應該是一些配置錯誤,否則是環境問題。請在此處發布您的配置文件以獲取更多幫助。

干杯!

有同樣的問題。 設置<property name="hibernate.default_schema" value="MY_SCHEMA"/>后問題就解決了。

您可以嘗試使用此方法來設置特定的架構名稱: <property name="hibernate.default_schema" value="yourSchemaName"/>

為了避免創建架構,您應該嘗試<property name="hibernate.hbm2ddl.auto" value="update"/> 會有所幫助

檢查您是否在 Hibernate Sessionfactory 中調用 user1 和 user2。

如果要處理several schemas正確,然后使用multi-tenant per schema還,如果你想更新/創建/遷移/手柄columns/tables/schemas/databases ,然后使用flywayliquibase

參考文獻

多租戶https://vladmihalcea.com/hibernate-database-schema-multitenancy/

Flyway https://flywaydb.org

Liquibase https://www.liquibase.org

Hibernate 文檔對此很清楚,您需要啟用本答案本示例中所述的多租戶操作。

基本上,您必須聲明多個持久性單元並讓每個單元指向不同的模式。 然后每個人也可以使用不同的登錄憑據。

Hibernate 文檔鏈接

總結一下:

  1. 定義你的持久化單元
  2. 定義每個持久性單元的映射文件

使用 JPA 時添加以下內容: 3. 從 SessionFactory 指定租戶標識符 4. 實現 MultiTenantConnectionProvider

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM