Затруднявам се с картографирането на синоними на Oracle в JPA Entities.
Като фон ще кажа, че трябва да го направя възможно или на сървър tomcat 7, както и на JBoss EAP 6.4. По-долу ще намерите фрагмент от моята конфигурация за постоянство.
- Търсене на източник на данни (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;
}
- 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;}
- JtaTransactionManager (изглежда също добре):
@Bean
public TransactionManager jtaTransactionManager(){
JtaTransactionManager manager = new JtaTransactionManager();
return manager.getTransactionManager();
}
- Обект, @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 нямам представа как да го настроя.
Моля, помогнете, може би някои от вас са имали подобен проблем.