내가 귀하의 경우 귀하는 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>
출력 시작 :
그러나 나는 또한 방향을 살펴보기를 권합니다 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>
희망.
지속성 공급자는 무엇입니까? 최대 절전 모드? 데이터베이스에 이미 카드 테이블이 포함되어 있으며 매번 삭제하고 교체 할 예정입니까? –
내 영속성 공급자가 eclipselink입니다. 그러나 나는 또한 그것을 최대 절전 모드로 바 꾸었습니다. 같은 문제가 남아있었습니다. –
jpa 공급자의 로그가 왜 존재하지 않는지 확인해보십시오. – DN1