How to set up default schema name in JPA configuration?
我发现在hibernate配置文件中我们可以设置参数
1 2 3 4 5 6 7 | <hibernate-configuration> <session-factory> ... <property name="hibernate.default_schema">myschema</property> ... </session-factory> </hibernate-configuration> |
现在我正在使用JPA,我也希望这样做。 否则我必须为每个@Table注释添加参数
1 2 3 | @Entity @Table (name ="projectcategory", schema ="SCHEMANAME") public class Category implements Serializable { ... } |
据我所知,这个参数应该在这部分配置的某个地方:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <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作为提供者)
1 2 3 4 5 | ... <property name="hibernate.default_schema" value="myschema"/> ... |
Hibernate应该选择它
只是为了节省来到帖子的人的时间(像我一样,寻找Spring配置类型并希望你的模式名称由外部源(属性文件)设置)。配置对你有用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <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引用的
1 2 3 4 5 | ... <persistence-unit name="MySchemaPU" transaction-type="JTA"> <provider> <mapping-file>META-INF/orm.xml</mapping-file> ... |
文件orm.xml内容引用如下:
1 2 3 4 5 6 7 8 9 10 11 12 | <?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中设置了架构值
1 2 | spring.jpa.properties.hibernate.dialect=... spring.jpa.properties.hibernate.default_schema=... |
对于那些使用最新版本的spring boot的人来说,这将有助于:
的.properties:
1 | spring.jpa.properties.hibernate.default_schema=<name of your schema> |
.yml:
1 2 3 4 5 | spring: jpa: properties: hibernate: default_schema: <name of your schema> |