我发现在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>
...但我在谷歌找不到它的名字。有什么想法吗?
答案 0 :(得分:71)
也不知道JPA财产。但你可以添加Hibernate属性(假设你使用Hibernate作为提供者)
...
<property name="hibernate.default_schema" value="myschema"/>
...
Hibernate应该选择
答案 1 :(得分:34)
只是为了节省来到帖子的人的时间(像我一样,寻找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 possible values and what they do? 我习惯于设置create-update,因为它很方便。但是,在生产中,我认为最好控制ddl,所以我采取任何ddl生成的第一次,保存它,而不是让它自动创建和更新。
答案 2 :(得分:26)
为了避免JPA Entity Java Classes中的硬编码模式,我们在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>
答案 3 :(得分:11)
对于使用spring-boot,基于java的配置的其他人,
我在application.properties
中设置了架构值spring.jpa.properties.hibernate.dialect=...
spring.jpa.properties.hibernate.default_schema=...
答案 4 :(得分:1)
如果您正在update table_name set E='A,C,D' where A='Y' and B='N' and C='Y' and D='Y'
中使用(org.springframework.jdbc.datasource.DriverManagerDataSource)
来指定数据库详细信息,请使用下面的简单属性来指定架构。
ApplicationContext.xml
答案 5 :(得分:0)
对于那些使用最新版本的spring boot的人来说,这将有所帮助:
.properties:
spring.jpa.properties.hibernate.default_schema=<name of your schema>
.yml:
spring:
jpa:
properties:
hibernate:
default_schema: <name of your schema>
答案 6 :(得分:0)
使用此
@Table (name = "Test", schema = "\"schema\"")
代替@Table (name = "Test", schema = "schema")
如果您使用的是Postgresql,则请求为:
SELECT * FROM "schema".test
不是:
SELECT * FROM schema.test
PS:测试是一个表格
答案 7 :(得分:0)
我必须在“”和“”中设置值
spring:
jpa:
properties:
hibernate:
default_schema: '"schema"'