2017-10-07 1 views
1

에 테이블을 생성하지 않습니다JPA가 여기에 클래스 이름을 내 실체 MySQL의

<?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="BankServicePU" transaction-type="JTA"> 
     <jta-data-source>jdbc/BankService</jta-data-source> 
     <class>az.bank.entities.Card</class> 
     <exclude-unlisted-classes>true</exclude-unlisted-classes> 
     <properties> 
      <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" /> 
      <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/cards" /> 
      <property name="javax.persistence.jdbc.user" value="root" /> 
      <property name="javax.persistence.jdbc.password" value="root" /> 
      <property name="javax.persistence.schema-generation.database.action" value="create"/> 
     </properties> 
    </persistence-unit> 
</persistence> 

내가 연결 풀 생성라는 이름의 한 : 여기

package az.bank.entities; 
import java.io.Serializable; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.Table; 

@Entity 
@Table (name = "cards") 
public class Card implements Serializable{ 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Long id; 
    private String cardHolder; 
    private String cardNumber; 
    private String cardPassword; 
    private String expiryYear; 
    private String expiryMonth; 
    private String cardType; 
    private double cardBalance; 
} 

는 그리고 나의 persistance.xml 파일입니다 jdbc/BankService 및 mySQL scheme이라는 이름의 카드가 있습니다. 그러나 프로그램을 배포하고 실행할 때 해당 구성표에 테이블을 만들지 않습니다. 여기서 내가 잘못한 것을 도와주세요.

+1

지속성 공급자는 무엇입니까? 최대 절전 모드? 데이터베이스에 이미 카드 테이블이 포함되어 있으며 매번 삭제하고 교체 할 예정입니까? –

+0

내 영속성 공급자가 eclipselink입니다. 그러나 나는 또한 그것을 최대 절전 모드로 바 꾸었습니다. 같은 문제가 남아있었습니다. –

+0

jpa 공급자의 로그가 왜 존재하지 않는지 확인해보십시오. – DN1

답변

0

내가 귀하의 경우 귀하는 EclipseLink가 테이블을 작성하고도 DB에 연결하는 명령을 수신하지 않음을 의미 EntityManagerFactory를 초기화하지 않는 것을 가정합니다.

파일을 사용하여 다시 입력해야하는 ServletContextListener을 사용할 수 있습니다.

빠른 예 : 방금 web.xml@WebListener 대신 주석 등록을 사용할 수 있습니다 서블릿 3.0을 시작

web.xml을

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns="http://java.sun.com/xml/ns/javaee" 
     xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
     version="3.0"> 
    <listener> 
     <listener-class> 
      com.mberazouski.stackoverflow.AppServletContextListener 
     </listener-class> 
    </listener> 
</web-app> 

.

는 AppServletContextListener.java는

package com.mberazouski.stackoverflow; 

import javax.persistence.EntityManager; 
import javax.persistence.EntityManagerFactory; 
import javax.persistence.Persistence; 
import javax.servlet.ServletContextEvent; 
import javax.servlet.ServletContextListener; 

public class AppServletContextListener implements ServletContextListener { 
    private static EntityManagerFactory emf; 

    public void contextInitialized(ServletContextEvent event) { 
     emf = Persistence.createEntityManagerFactory("default"); 
     createEntityManager(); 
    } 

    public void contextDestroyed(ServletContextEvent event) { 
     emf.close(); 
    } 

    public static EntityManager createEntityManager() { 
     if (emf == null) { 
      throw new IllegalStateException("Context is not initialized yet."); 
     } 

     return emf.createEntityManager(); 
    } 
} 

그래서 persistence.xml 절대적으로 유효합니다. 당신은 RESOURCE_LOCAL를 통해 연결을 구성 할 수 있습니다

RESOURCE_LOCAL

: 내 도메인 모델 파일에 적응 것 같습니다.

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="2.0" 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 http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> 
    <persistence-unit name="default" transaction-type="RESOURCE_LOCAL"> 
     <class>com.mberazouski.stackoverflow.domain.Cards</class> 
     <properties> 
      <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/> 
      <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/rsreu"/> 
      <property name="javax.persistence.jdbc.user" value="root"/> 
      <property name="javax.persistence.jdbc.password" value="root"/> 
      <property name="javax.persistence.schema-generation.database.action" value="create"/> 
     </properties> 
    </persistence-unit> 
</persistence> 

JTA 데이터 소스의 모든 구성이 바람둥이에서 Resource 블록에서 이동합니다이 경우

는 :

는 바람둥이의
<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="2.0" 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 http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> 
    <persistence-unit name="default" transaction-type="JTA"> 
     <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> 
     <jta-data-source>java:comp/env/jdbc/EclispeLinkDB</jta-data-source> 
     <class>com.mberazouski.stackoverflow.domain.Cards</class> 
     <properties> 
      <property name="javax.persistence.schema-generation.database.action" value="create"/> 
     </properties> 
    </persistence-unit> 
</persistence> 

출력 시작 : enter image description here

그러나 나는 또한 방향을 살펴보기를 권합니다 spring. 이니셜 라이저 방식을 사용하면 EntityManagerFactory을 구성 파일에서 직접 초기화 할 수 있습니다. 이 도움이 될 것입니다

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> 

    <bean id="emf" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean "> 
     <property name="persistenceUnitName" value="default"/> 
    </bean> 
</beans> 

희망.

1

DB에 이미 카드 테이블이있는 경우 먼저 삭제하십시오. 사용

<property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/> 
+0

문제는 내 DB에 카드 테이블이 없다는 것입니다. –