2014-12-06 2 views
0

Есть сообщения, связанные с этой проблемой, но это не решило проблему.Ошибка при развертывании - невозможно построить EntityManagerFactory

Когда я развернуть приложение войны, я получаю следующее сообщение об ошибке

Invocation of init method failed; nested exception is javax.persistence. 
PersistenceException: [PersistenceUnit: default] Unable to build EntityManagerFactory 
at oracle.oc4j.admin.internal.DeployerBase.execute(DeployerBase.java:133) 
at 
oracle.oc4j.admin.jmx.server.mbeans.deploy.OC4JDeployerRunnable.doRun 
(OC4JDeployerRunnable.java:52) 
at oracle.oc4j.admin.jmx.server.mbeans.deploy.DeployerRunnable.run 
(DeployerRunnable.java:81) 
at com.evermind.util.ReleasableResourcePooledExecutor$MyWorker.run 
(ReleasableResourcePooledExecutor.java:298) 
at java.lang.Thread.run(Unknown Source) 

Не знаю, как решить эту проблему.

applicationContext.xml

<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
http://www.springframework.org/schema/tx 
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd 
http://www.springframework.org/schema/context 
http://www.springframework.org/schema/context/spring-context-3.0.xsd" 
> 
    <!-- Data Source Declaration -->  
    <bean id="DataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> 
     <property name="jndiName" value="jdbc/scottDS"/> 
    </bean> 

    <context:component-scan base-package="net.test" /> 
    <bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/> 
    <bean id="entityManagerFactory" 
      class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
     <property name="dataSource" ref="DataSource" /> 
     <property name="packagesToScan" value="net.test" /> 
     <property name="jpaVendorAdapter"> 
      <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> 
       <property name="showSql" value="true" /> 
       <property name="generateDdl" value="false" /> 
       <property name="databasePlatform" value="${jdbc.dialectClass}" /> 
      </bean> 
     </property> 
    </bean> 
    <bean id="defaultLobHandler" class="org.springframework.jdbc.support.lob.DefaultLobHandler" /> 
    <!-- Transaction Config --> 
    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
     <property name="entityManagerFactory" ref="entityManagerFactory" /> 
    </bean> 
    <tx:annotation-driven transaction-manager="transactionManager"/>   
    <context:annotation-config/> 

</beans> 

Классы сущностей

Emp

@Entity 
@Table(name = "EMP" 
) 
@XmlRootElement 
public class Emp implements java.io.Serializable { 

    private short empno; 
    private Dept dept; 
    private String ename; 
    private String job; 
    private Short mgr; 
    private Date hiredate; 
    private BigDecimal sal; 
    private BigDecimal comm; 

    public Emp() { 
    } 

    public Emp(short empno) { 
     this.empno = empno; 
    } 

    public Emp(short empno, Dept dept, String ename, String job, Short mgr, Date hiredate, 
      BigDecimal sal, BigDecimal comm) { 
     this.empno = empno; 
     this.dept = dept; 
     this.ename = ename; 
     this.job = job; 
     this.mgr = mgr; 
     this.hiredate = hiredate; 
     this.sal = sal; 
     this.comm = comm; 
    } 

    @Id 
    @Column(name = "EMPNO", unique = true, nullable = false, precision = 4, scale = 0) 
    public short getEmpno() { 
     return this.empno; 
    } 

    public void setEmpno(short empno) { 
     this.empno = empno; 
    } 

@ManyToOne 
    @JoinColumn(name="DEPTNO") 
    public Dept getDept() { 
     return this.dept; 
    } 

    public void setDept(Dept dept) { 
     this.dept = dept; 
    } 
    @Column(name = "ENAME", length = 10) 
    public String getEname() { 
     return this.ename; 
    } 

    public void setEname(String ename) { 
     this.ename = ename; 
    } 

    @Column(name = "JOB", length = 9) 
    public String getJob() { 
     return this.job; 
    } 

    public void setJob(String job) { 
     this.job = job; 
    } 

    @Column(name="MGR", precision=4, scale=0) 
    public Short getMgr() { 
     return this.mgr; 
    } 

    public void setMgr(Short mgr) { 
     this.mgr = mgr; 
    } 
    @Temporal(TemporalType.DATE) 
    @Column(name="HIREDATE", length=7) 
    public Date getHiredate() { 
     return this.hiredate; 
    } 

    public void setHiredate(Date hiredate) { 
     this.hiredate = hiredate; 
    } 
    @Column(name="SAL", precision=7) 
    public BigDecimal getSal() { 
     return this.sal; 
    } 

    public void setSal(BigDecimal sal) { 
     this.sal = sal; 
    } 


    @Column(name="COMM", precision=7) 
    public BigDecimal getComm() { 
     return this.comm; 
    } 

    public void setComm(BigDecimal comm) { 
     this.comm = comm; 
    } 
} 

Отдел

@Entity 
@Table(name="DEPT" 
)@XmlRootElement 
public class Dept implements java.io.Serializable { 


    private byte deptno; 
    private String dname; 
    private String loc; 
    private Set emps = new HashSet(0); 

    public Dept() { 
    } 


    public Dept(byte deptno) { 
     this.deptno = deptno; 
    } 
    public Dept(byte deptno, String dname, String loc,Set emps) { 
     this.deptno = deptno; 
     this.dname = dname; 
     this.loc = loc; 
     this.emps = emps; 
    } 

    @Id 
    @Column(name="DEPTNO", unique=true, nullable=false, precision=2, scale=0) 
    public byte getDeptno() { 
     return this.deptno; 
    } 

    public void setDeptno(byte deptno) { 
     this.deptno = deptno; 
    } 


    @Column(name="DNAME", length=14) 
    public String getDname() { 
     return this.dname; 
    } 

    public void setDname(String dname) { 
     this.dname = dname; 
    } 


    @Column(name="LOC", length=13) 
    public String getLoc() { 
     return this.loc; 
    } 

    public void setLoc(String loc) { 
     this.loc = loc; 
    } 

@OneToMany(mappedBy="dept") 
public Set<Emp> getEmps() { 
    return this.emps; 
} 

    public void setEmps(Set emps) { 
     this.emps = emps; 
    } 




} 

Update

persistence.xml

<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence persistence_1_0.xsd" version="1.0"> 
     <persistence-unit name="default" transaction-type="RESOURCE_LOCAL"> 
      <provider>org.hibernate.ejb.HibernatePersistence</provider> 
      <class>net.test.entity.Emp</class> 
      <class>net.test.entity.Dept</class> 
      <properties> 
       <property name="toplink.logging.level" value="FINE"/> 
       <property name="toplink.jdbc.driver" value="oracle.jdbc.OracleDriver"/> 
       <property name="toplink.jdbc.url" value="jdbc:oracle:thin:@serverdb:1521:devp"/> 
       <property name="toplink.jdbc.password" value="scott"/> 
       <property name="toplink.jdbc.user" value="tiger"/> 
      </properties> 
     </persistence-unit> 
    </persistence> 

Модифицированный applicationContext.xml

<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
http://www.springframework.org/schema/tx 
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd 
http://www.springframework.org/schema/context 
http://www.springframework.org/schema/context/spring-context-3.0.xsd" 
> 
    <context:component-scan base-package="net.test" /> 

    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
    <property name="persistenceUnitName" value="default" /> 
    <property name="jpaVendorAdapter"> 
     <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> 
      <property name="generateDdl" value="false" /> 
      <property name="showSql" value="true" /> 
      <property name="databasePlatform" value="org.hibernate.dialect.OracleDialect" /> 
     </bean> 
    </property> 
</bean> 
    <!-- Transaction Config --> 
    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
     <property name="entityManagerFactory" ref="entityManagerFactory" /> 
    </bean> 
    <tx:annotation-driven transaction-manager="transactionManager"/>   
    <context:annotation-config/> 
</beans> 

Update 2

Модифицированный persistence.xml

<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence persistence_1_0.xsd" version="1.0"> 
    <persistence-unit name="default" transaction-type="RESOURCE_LOCAL"> 
     <provider>org.hibernate.ejb.HibernatePersistence</provider> 
     <class>net.test.entity.Emp</class> 
     <class>net.test.entity.Dept</class> 
     <properties> 
     <property name="hibernate.connection.driver_class" value="oracle.jdbc.OracleDriver" /> 
     <property name="hibernate.connection.url" value="jdbc:oracle:thin:@serverdb:1521:DEVP" /> 
     <property name="hibernate.connection.username" value="scott" /> 
     <property name="hibernate.connection.password" value="tiger" /> 
     <property name="hibernate.show_sql" value="true" /> 
     </properties> 
    </persistence-unit> 
</persistence> 
+0

Вы определили какое-либо постоянное устройство по имени «по умолчанию»? – Gaurav

+0

@Gaurav Я не могу найти постоянный блок по умолчанию. Когда я развертываю приложение, сервер приложений запрашивает родительское приложение, а по умолчанию - выбор. Это вызывает какие-либо проблемы? – user75ponic

+0

posting persistence.xml было бы понятно, нет? так как вы определили свою постоянную единицу там, и люди не могут ее увидеть (и, похоже, JPA тоже не может ее увидеть) –

ответ

1

Вы, кажется, смешивания Toplink и Hibernate. Из persistent.xml

<properties> 
    <property name="toplink.logging.level" value="FINE"/> 
    <property name="toplink.jdbc.driver" value="oracle.jdbc.OracleDriver"/> 
    <property name="toplink.jdbc.url" value="jdbc:oracle:thin:@serverdb:1521:devp"/> 
    <property name="toplink.jdbc.password" value="scott"/> 
    <property name="toplink.jdbc.user" value="tiger"/> 
</properties> 

Замените свойства специальными свойствами гибернации.

+0

Я использовал свойства hibernate в persistent.xml, однако я все еще получаю такие же ошибки. – user75ponic

+0

Модифицированный persistent.xml добавлен в мой вопрос как Обновление 2. Спасибо – user75ponic

+0

- это ваш проект с использованием maven?. Если нет, вы можете проверить, присутствует ли файл persistence.xml в папке dist/classes. Коренной причиной, по-видимому, является persistence.xml, который невозможно обнаружить. Другие варианты - внимательно изучить созданные журналы. Это может дать вам некоторый намек. – Gaurav

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