2014-12-06 12 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은

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

applicationContext.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> 

업데이트 2

당신은 상단 링크를 혼합 최대 절전 모드 것 같다

<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

+0

@Gaurav default라는 영구적 유닛을 찾을 수 없습니다. 응용 프로그램을 배포 할 때 응용 프로그램 서버는 부모 응용 프로그램을 요청하고 기본값은 드롭 다운 선택입니다. 이로 인해 문제가 발생합니까? – user75ponic

+0

persistence.xml을 게시하는 것이 다소 의미가 있습니까? 당신이 거기에 퍼시스턴스 유닛을 정의했기 때문에 사람들은 그것을 볼 수 없기 때문에 (그리고 JPA 역시 그것을 볼 수 없다.) –

답변

1

persistence.xml을 수정. 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

persistent.xml에서 최대 절전 모드 속성을 사용했지만 여전히 같은 오류가 발생합니다. – user75ponic

+0

수정 된 persistent.xml이 업데이트 2로 추가되었습니다. 감사합니다. – user75ponic

+0

은 maven을 사용하는 프로젝트 빌드입니까? 그렇지 않은 경우 persistence.xml이 dist/classes 폴더에 있는지 확인할 수 있습니다. 근본 원인은 persistence.xml을 발견 할 수없는 것 같습니다. 다른 옵션은 생성 된 로그를 면밀히 관찰하는 것입니다. 그것은 당신에게 어떤 힌트를 줄지도 모릅니다. – Gaurav