部署时出错 - 无法构建EntityManagerFactory

时间:2014-12-06 18:31:55

标签: spring hibernate jpa jpa-2.0 oc4j

之前有关于此问题的帖子,但这并没有解决问题。

当我部署应用程序战争时,我收到以下错误

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>

1 个答案:

答案 0 :(得分: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特定属性替换属性。

相关问题