Java 当我运行程序时,JPA不会在MySQL中创建表

Java 当我运行程序时,JPA不会在MySQL中创建表,java,mysql,jpa,orm,eclipselink,Java,Mysql,Jpa,Orm,Eclipselink,这是我的名为Class的实体: 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; @E

这是我的名为Class的实体:

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;   
}
这是我的persistence.xml文件:

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

jdbc/BankService
az.bank.entities.Card
真的

我创建了名为jdbc/BankService的连接池和名为cards的mySQL方案。但当我部署并运行程序时,它不会在该方案中创建表。请帮帮我,我做错了什么

如果您的数据库已经包含card表,那么只需先删除它即可。使用

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

我假设您没有初始化
EntityManagerFactory
,这意味着您的eclipselink没有收到创建表甚至连接到数据库的命令

在您的情况下,您可以尝试使用
ServletContextListener
,这必须与
web.xml
文件一起重新设置

快速示例:

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>
<?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>
所以您的
persistence.xml
是绝对有效的。适用于我的域模型文件如下所示:

本地资源

您可以通过
资源\u 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>
tomcat启动的输出:

但我也建议您查看
spring
的方向。使用it初始化器方法,您可以直接从配置文件初始化EntityManagerFactory

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


希望这会有所帮助。

什么是持久性提供程序?冬眠?db是否已经包含卡表,并且您希望每次都删除并替换它?我的持久性提供程序是eclipselink。但我也把它改成了冬眠。同样的问题仍然存在。为什么不查看jpa提供商的日志,因为这就是它存在的原因?问题是my DB不包含任何卡表。