2014-12-06 80 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; 
    } 




} 

更新

的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> 

更新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

你是否按名称'default'定义了任何持久单元? – Gaurav 2014-12-06 20:46:46

+0

@Gaurav我找不到任何持久单位称为默认。当我部署应用程序时,应用程序服务器要求父应用程序,默认值为下拉选项。这是否会导致任何问题? – user75ponic 2014-12-07 01:45:06

+0

发布persistence.xml会有点意义不?因为你在那里定义了你的持久化单元,并且人们看不到它(看起来JPA也看不到它) – 2014-12-07 08:07:32

回答

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> 

用hibernate特定属性替换属性。

+0

我在persistent.xml中使用了hibernate属性,但是我仍然收到相同的错误。 – user75ponic 2014-12-07 11:07:18

+0

已修改的persistent.xml作为Update 2添加到我的问题中。谢谢 – user75ponic 2014-12-07 11:09:42

+0

是您使用maven构建的项目吗?如果不是,您可以检查dist/classes文件夹中是否存在persistence.xml。根本原因似乎是persistence.xml不可发现。其他选项是仔细查看生成的日志。这可能会给你一些提示。 – Gaurav 2014-12-07 11:16:14

相关问题