2012-11-20 6 views
1

Я хочу разработать Java EE-приложение с JPA (реализация EclipseLink) и PostgreSQL в качестве базы данных.JPA, EclipseLink, PostgreSQL и схемы

Я выбрал одну базу данных и несколько схем, вместо того, чтобы иметь кратность баз данных и одну схему для каждой базы данных.

Итак, в моем persistence.xml у меня есть что-то вроде этого:

<persistence-unit name="00" transaction-type="JTA"> 

    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> 
    <jta-data-source>todo</jta-data-source> 

    <class>...</class> 
    <class>...</class> 

    <properties> 
     <property name="javax.persistence.target-database" value="PostgreSQL" /> 
     <property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver" /> 
     <property name="javax.persistence.jdbc.url" value="jdbc:postgresql://localhost:5432/testdb;create=true" /> 
     <property name="javax.persistence.jdbc.user" value="user" /> 
     <property name="javax.persistence.jdbc.password" value="userpwd" /> 
    </properties> 

</persistence-unit> 

<persistence-unit name="01" transaction-type="JTA"> 

    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> 
    <jta-data-source>todo</jta-data-source> 

    <class>...</class> 
    <class>...</class> 

    <properties> 
     <property name="javax.persistence.target-database" value="PostgreSQL" /> 
     <property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver" /> 
     <property name="javax.persistence.jdbc.url" value="jdbc:postgresql://localhost:5432/testdb;create=true" /> 
     <property name="javax.persistence.jdbc.user" value="user" /> 
     <property name="javax.persistence.jdbc.password" value="userpwd" /> 
    </properties> 

</persistence-unit> 

можно легко ссылаться на устойчивость блока:

EntityManagerFactory emf = Persistence.createEntityManagerFactory("01"); 
EntityManager em = emf.createEntityManager(); 

, но как я могу хранить информацию о схемах в persistence.xml ? Я хочу получить доступ к схеме 00 или 01 в базе данных testdb.

Возможно, я могу изменить схему через собственный SQL-код напрямую, но есть ли способ привязать схему к единице непрерывности?

Спасибо

+0

Возможный дубликат [JPA - EclipseLink - Как изменить схему по умолчанию] (http://stackoverflow.com/questions/3211138/jpa-eclipselink-how-to-change-default-schema) –

+0

Вы правы, извините –

ответ

3

Этот же вопрос был задан и ответил здесь: JPA - EclipseLink - How to change default schema

Вы можете изменить схему для всей единицы сохранения с помощью файла orm.xml, или определить его в пределах каждой таблицы аннотаций или xml по мере необходимости.

+0

Я создавал столько пользователей postgreSQL, что у меня есть схемы и переназначить схемы по умолчанию этих пользователей, но ваше решение определенно лучше. Спасибо ! –

Смежные вопросы