JPA/Hibernate LocalSessionFactory картографиране на синоними на Oracle

Затруднявам се с картографирането на синоними на Oracle в JPA Entities.

Като фон ще кажа, че трябва да го направя възможно или на сървър 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 моята конфигурация на Datasource в 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)


Успях да го накарам да работи. Може би някой ще го намери за полезно. Изглежда, че освен факта, че синонимите на oracle не могат да бъдат валидирани, настройката на свойството hibernate.hbm2ddl.auto е задължителна. Както можете да видите в предишната публикация, изобщо не съм имал зададено това свойство. наздраве!

person Michal Krzaczynski    schedule 23.07.2015