Как настроить имя схемы по умолчанию в конфигурации JPA? - PullRequest
55 голосов
/ 29 апреля 2010

Я обнаружил, что в конфигурационном файле hibernate мы можем установить параметр hibernate.default_schema:

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

Теперь я использую JPA и хочу сделать то же самое. В противном случае мне нужно добавить параметр schema к каждой аннотации @Table, например:

@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>

... но я не могу найти его имя в Google. Есть идеи?

Ответы [ 5 ]

71 голосов
/ 29 апреля 2010

Также не знаю свойства JPA. Но вы можете просто добавить свойство Hibernate (при условии, что вы используете Hibernate в качестве провайдера) как

...

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

...

Hibernate должен поднять это

34 голосов
/ 09 ноября 2012

Просто для того, чтобы сэкономить время людей, которые приходят на почту (например, я, кто ищет тип конфигурации 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 генерирует в первый раз, сохраняю его, а не позволяю ему автоматически создавать и обновлять.

26 голосов
/ 27 апреля 2011

Во избежание жесткого кодирования схемы в Java-классах сущности JPA мы использовали файл сопоставления orm.xml в приложении Java EE, развернутом в OracleApplicationServer10 (OC4J, Orion). Он лежит в 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>
12 голосов
/ 11 мая 2017

Для тех, кто использует весеннюю загрузку, конфигурация на основе Java,

Я установил значение схемы в application.properties

spring.jpa.properties.hibernate.dialect=...
spring.jpa.properties.hibernate.default_schema=...
0 голосов
/ 09 июня 2019

Для тех, кто использует последние версии весенней загрузки, поможет это:

.properties:

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

.yml:

spring:
    jpa:
        properties:
            hibernate:
                default_schema: <name of your schema>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...