Сопоставление JPA/Hibernate LocalSessionFactory синонимов Oracle

Я борюсь с сопоставлением синонимов Oracle с объектами JPA.

В качестве фона скажу, что мне нужно сделать это возможным как на сервере tomcat 7, так и на JBoss EAP 6.4. Ниже вы найдете фрагмент моей конфигурации постоянства.

  1. Поиск источника данных (найден jndi, привязан к источнику данных)
@Bean
public DataSource datasource() throws NamingException{
    Context initCtx = new InitialContext();
    Context envCtx = (Context) initCtx.lookup("java:comp/env");
    DataSource ds = (DataSource) envCtx.lookup("jdbc/PAMGODW_DS");

    return ds;
}
  1. LocalSessionFactoryBean (кажется, работает):
@Bean
public LocalSessionFactoryBean sessionFactory() throws NamingException, IOException{
    Properties props = new Properties();
    props.put("hibernate.dialect", "org.hibernate.dialect.Oracle10gDialect");
    props.put("hibernate.synonyms", "true");
    props.put("hibernate.connection.includeSynonyms", "true");


    LocalSessionFactoryBean f = new LocalSessionFactoryBean();
    f.setDataSource(datasource());
    f.setPackagesToScan(new String[]{"com.roche.nrimini.pam.domain.entity", "com.roche.nrimini.pam.domain.service", "com.roche.nrimini.pam.domain.repository"});
    f.setHibernateProperties(props);
    f.setJtaTransactionManager(jtaTransactionManager());
    f.setAnnotatedPackages(new String[]{"com.roche.nrimini.pam.domain.entity", "com.roche.nrimini.pam.domain.service", "com.roche.nrimini.pam.domain.repository"});
    f.afterPropertiesSet();
    System.out.println("LOCALSESSIONFACTORY BEAN");

    return f;}
  1. JtaTransactionManager (кажется, тоже в порядке):
@Bean
public TransactionManager jtaTransactionManager(){
    JtaTransactionManager manager = new JtaTransactionManager();

    return manager.getTransactionManager();
}
  1. Объект @Table(name="V_TABLE_SYN") фактически указывает на синоним Oracle:
@Entity
@Table(name = "V_TABLE_SYN")
public class SomeSynonym implements Serializable {

// @Id and @Column mappings here

Что я получаю, когда пытаюсь запросить объекты Entity, так это ORA-00942 Таблица или представление не существует.

В среде JBoss моя конфигурация источника данных в файле standalone.xml выглядит так:

<datasource jta="false" jndi-name="java:jboss/PAMGODW_DS" pool-name="PAMGODW_DS" enabled="true" use-ccm="false">
                <connection-url>jdbc:oracle:thin:@someserver/some_service</connection-url>
                <driver-class>oracle.jdbc.OracleDriver</driver-class>
                <connection-property name="includeSynonyms">
                    true
                </connection-property>
                <driver>oracle</driver>
                <pool>
                    <min-pool-size>0</min-pool-size>
                    <max-pool-size>10</max-pool-size>
                </pool>
                <security>
                    <user-name>some_user</user-name>
                    <password>a_pass</password>
                </security>
                <validation>
                    <validate-on-match>false</validate-on-match>
                    <background-validation>false</background-validation>
                </validation>
                <statement>
                    <share-prepared-statements>false</share-prepared-statements>
                </statement>
            </datasource>

В Tomcat я получил:

<Resource name="jdbc/SOME_DS" auth="Container"
          type="javax.sql.DataSource" driverClassName="oracle.jdbc.OracleDriver"
          url="jdbc:oracle:thin:@some_server/some_service"
          username="some_user" password="a_pass" maxActive="20" maxIdle="10"
          maxWait="-1">

Я слышал и читал о свойстве include.synonyms, но, похоже, оно не работает, а в Tomcat env я понятия не имел, как его установить.

Помогите, может у кого-то была похожая проблема.


person Michal Krzaczynski    schedule 22.07.2015    source источник
comment
@AhmedAshour спасибо за редактирование   -  person Michal Krzaczynski    schedule 22.07.2015


Ответы (1)


Мне удалось заставить его работать. Может быть, кто-то найдет это полезным. Похоже, что помимо того факта, что синонимы оракула не могут быть проверены, установка свойства hibernate.hbm2ddl.auto является обязательной. Как вы можете видеть в предыдущем посте, я вообще не устанавливал это свойство. Ваше здоровье!

person Michal Krzaczynski    schedule 23.07.2015