簡體   English   中英

如何在 JPA 配置中設置默認模式名稱?

[英]How to set up default schema name in JPA configuration?

我發現在 hibernate 配置文件中我們可以設置參數hibernate.default_schema

<hibernate-configuration> 
   <session-factory>
      ...
      <property name="hibernate.default_schema">myschema</property>
      ...
   </session-factory>
</hibernate-configuration>

現在我正在使用 JPA,我也想做同樣的事情。 否則,我必須向每個 @Table 注釋添加參數schema ,例如:

@Entity
@Table (name = "projectcategory", schema = "SCHEMANAME")
public class Category implements Serializable { ... }

據我了解,這個參數應該在這部分配置的某個地方:

<bean id="domainEntityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="persistenceUnitName" value="JiraManager"/>
    <property name="dataSource" ref="domainDataSource"/>
    <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
            <property name="generateDdl" value="false"/>
            <property name="showSql" value="false"/>
            <property name="databasePlatform" value="${hibernate.dialect}"/>
        </bean>
    </property>
</bean>

<bean id="domainDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
    <property name="driverClass" value="${db.driver}" />
    <property name="jdbcUrl" value="${datasource.url}" />
    <property name="user" value="${datasource.username}" />
    <property name="password" value="${datasource.password}" />
    <property name="initialPoolSize" value="5"/>
    <property name="minPoolSize" value="5"/>
    <property name="maxPoolSize" value="15"/>
    <property name="checkoutTimeout" value="10000"/>
    <property name="maxStatements" value="150"/>
    <property name="testConnectionOnCheckin" value="true"/>
    <property name="idleConnectionTestPeriod" value="50"/>
</bean>

...但我在谷歌上找不到它的名字。 有任何想法嗎?

也不知道 JPA 屬性。 但是您可以添加 Hibernate 屬性(假設您使用 Hibernate 作為提供者)作為

...

<property name="hibernate.default_schema" value="myschema"/>

...

Hibernate 應該選擇它

只是為了節省來帖子的人的時間(像我一樣,尋找 Spring 配置類型並希望您的架構名稱由外部源(屬性文件)設置)。 配置對你有用的是

<bean id="domainEntityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="persistenceUnitName" value="JiraManager"/>
    <property name="dataSource" ref="domainDataSource"/>
    <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
            <property name="generateDdl" value="false"/>
            <property name="showSql" value="false"/>
            <property name="databasePlatform" value="${hibernate.dialect}"/>
        </bean>
    </property>
    <property name="jpaProperties">
       <props>
            <prop key="hibernate.hbm2ddl.auto">none</prop>
            <prop key="hibernate.default_schema">${yourSchema}</prop>
       </props>
</property>

</bean>

Ps:對於hibernate.hdm2ddl.auto,您可以查看Hibernate hbm2ddl.auto 可能的值以及它們的作用? 我以前設置create-update,因為方便。 但是,在生產中,我認為最好控制ddl,因此我將第一次生成的ddl 保存起來,而不是讓它自動創建和更新。

為了避免在 JPA 實體 Java 類中硬編碼模式,我們在 OracleApplicationServer10(OC4J,Orion)中部署的 Java EE 應用程序中使用了 orm.xml 映射文件。 它位於model.jar/META-INF/ 以及persistence.xml 中。 映射文件 orm.xml 是從 peresistence.xml 引用的,帶有標記

...
  <persistence-unit name="MySchemaPU"  transaction-type="JTA">
    <provider>
     <mapping-file>META-INF/orm.xml</mapping-file>
...

文件orm.xml內容引用如下:

<?xml version="1.0" encoding="UTF-8"?>
<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                 xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_1_0.xsd"
                 version="1.0">
 <persistence-unit-metadata>

  <persistence-unit-defaults>
   <schema>myschema</schema>
  </persistence-unit-defaults>
 </persistence-unit-metadata>
</entity-mappings>

對於使用 spring-boot、基於 java 的配置的其他人,

我在 application.properties 中設置了架構值

spring.jpa.properties.hibernate.dialect=...
spring.jpa.properties.hibernate.default_schema=...

對於那些使用最新版本 spring boot 的人會有所幫助:

。特性:

spring.jpa.properties.hibernate.default_schema=<name of your schema>

.yml:

spring:
    jpa:
        properties:
            hibernate:
                default_schema: <name of your schema>

用這個

@Table (name = "Test", schema = "\"schema\"")

代替@Table (name = "Test", schema = "schema")

如果你在 postgresql 上,請求是:

SELECT * FROM "schema".test 

不是 :

SELECT * FROM schema.test

PS:測試是一張桌子

我必須在 '' 和 "" 中設置值

spring:
   jpa:
     properties:
       hibernate:
          default_schema: '"schema"'

如果您在ApplicationContext.xml中使用(org.springframework.jdbc.datasource.DriverManagerDataSource)來指定數據庫詳細信息,則使用下面的簡單屬性來指定架構。

<property name="schema" value="schemaName" />

暫無
暫無

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

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