Привет: я изучаю spring с jpa, используя базу данных oracle, я попробовал пример, который ищет запись с использованием идентификатора. Мой пример работает, но поиск базы данных с сообщением занимает слишком много времени: INFO: HHH000102: Выбор базы данныхМетаданные, которые могут занять 1 или 2 минуты, у меня в таблице только 257 записей.Какое решение для этого, что мне нужно изменить, чтобы сделать это быстро.спасибо за вашу помощь.
spring-context.xml:
<context:component-scan base-package="ben" />
<tx:annotation-driven />
<bean id="hello" class="ben.Hello">
<property name="message" value="Bonjour"> </property>
</bean>
<bean id="personDaoImpl" class="ben.PersonDaoImpl">
</bean>
<bean id="myEmf"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="packagesToScan" value="ben" />
<property name="persistenceUnitName" value="BenJpaProject"></property>
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
</property>
<property name="jpaProperties">
<props>
<prop key="hibernate.hbm2ddl.auto">validate</prop>
<prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
</props>
</property>
</bean>
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@10.56.4.101:1552/dev1002" />
<property name="username" value="ISPOWNRE6" />
<property name="password" value="ISPOWNRE6" />
</bean>
<bean id="transactionManager"
class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="myEmf" />
</bean>
<bean id="persistenceExceptionTranslationPostProcessor" class=
"org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" />
<!-- <bean id="personDao" class="ben.AbstractBaseDao" /> -->
<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />
</beans>
persistence.xml:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1"
xmlns="http://xmlns.jcp.org/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
<persistence-unit name="BenJpaProject" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<class>ben.Person</class>
<properties>
<property name="javax.persistence.jdbc.driver" value="oracle.jdbc.OracleDriver" />
<property name="javax.persistence.jdbc.user" value="ISPOWNRE6" />
<property name="javax.persistence.jdbc.password" value="ISPOWNRE6" />
<property name="javax.persistence.jdbc.url" value="jdbc:oracle:thin:@10.56.4.101:1552:dev1002" />
<property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect" />
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.jdbc.lob.non_contextual_creation"
value="true" />
<property name="hibernate.jdbc.use_get_generated_keys"
value="true" />
<property name="hibernate.archive.autodetection" value="class " />
</properties>
</persistence-unit>
</persistence>
Класс для использования EntityManager:
package ben;
@Repository
public class AbstractBaseDao
{
private EntityManager em;
@PersistenceContext
public void setEm(EntityManager em)
{
this.em = em;
}
public <T> T findById (Class <T> clazz,Serializable code)
{
return em.find(clazz, code);
}
}
Основной класс:
public class MainJpa
{
public static void main(String[] args)
{
ApplicationContext context= new ClassPathXmlApplicationContext("spring/spring-context.xml");
PersonDao personDao=(PersonDao) context.getBean("personDaoImpl");
BDE1 person=personDao.findPersonById((long) 10);
System.out.println("person Found "+person.getNumero());
}
}
класс PersonDaoImpl:
public class PersonDaoImpl extends AbstractBaseDao implements PersonDao
{
@Override
public Person findPersonById(Long id)
{
Class <Person> clazz=Person.class;
return findById(clazz, id);
}
Сущность Person:
@Entity
public class Person
{
@Id
Long id;
Long numero;
public Long getId()
{
return id;
}
public void setId(Long id)
{
this.id = id;
}
public Long getNumero()
{
return numero;
}
public void setNumero(Long numero)
{
this.numero = numero;
}
}