未使用实体管理器创建实体表

时间:2019-07-13 16:35:19

标签: jpa

我正在尝试使用Java Persistence API在mysql数据库中插入学生数据。我的代码不会引发任何异常。但是实体表未在数据库中创建。

持久性类:

public class PersistStudent {

    public static void main(String args[])
    {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("Student_details");
        EntityManager em = emf.createEntityManager();
        em.getTransaction().begin();
        try
        {
        StudentEntity s = new StudentEntity();
        s.setS_id(101);
        s.setS_name("Ram");
        s.setS_fee("5000");
        em.persist(s);
        }
        catch(Exception e)
        {
            em.getTransaction().commit();
        }
        em.close();
        emf.close();
    }

}

实体类:

package DEMO.JPA;

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="students")
public class StudentEntity {

    @Id
    private int s_id;
    private String s_name;
    private String s_fee;


    public int getS_id() {
        return s_id;
    }
    public void setS_id(int s_id) {
        this.s_id = s_id;
    }
    public String getS_name() {
        return s_name;
    }
    public void setS_name(String s_name) {
        this.s_name = s_name;
    }
    public String getS_fee() {
        return s_fee;
    }
    public void setS_fee(String s_fee) {
        this.s_fee = s_fee;
    }

}

persistence.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <persistence 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"
                 version="2.1"> 
    <persistence-unit name="Student_details">  
    <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>    
        <class>DEMO.JPA.StudentEntity</class>  

    <properties>
                <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/jpa" />
                <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />
                <property name="hibernate.connection.username" value="root" />
                <property name="hibernate.connection.password" value="" />
                <property name="hibernate.archive.autodetection" value="class" />
                <property name="hibernate.show_sql" value="true" />
                <property name="hibernate.format_sql" value="true" />
                <property name="hbm2ddl.auto" value="update" />
            </properties>

        </persistence-unit>  
</persistence>

控制台:

  

2019年7月13日上午8:13:53 org.hibernate.jpa.internal.util.LogHelper   logPersistenceUnitInformation信息:HHH000204:处理中   PersistenceUnitInfo [名称:Student_details ...] 2019年7月13日   上午8:13:53 org.hibernate.Version logVersion INFO:HHH000412:Hibernate   核心{5.1.0.Final} 2019年7月13日,上午8:13:53   org.hibernate.cfg。环境信息:HHH000206:   找不到hibernate.properties 2019年7月13日上午8:13:53   org.hibernate.cfg.Environment buildBytecodeProvider信息:HHH000021:   字节码提供者名称:javassist 2019年7月13日上午8:13:53   org.hibernate.annotations.common.reflection.java.JavaReflectionManager    INFO:HCANN000001:休眠公共注释   {5.0.1.Final} 2019年7月13日上午8:13:53   org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl   配置WARN:HHH10001002:使用Hibernate内置连接池   (非用于生产!)2019年7月13日8:13:54 AM   org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl   buildCreator信息:HHH10001005:使用驱动程序[com.mysql.jdbc.Driver]   在URL [jdbc:mysql:// localhost:3306 / jpa] 2019年7月13日上午8:13:54   org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl   buildCreator信息:HHH10001001:连接属性:{user = root,   password = ****} 2019年7月13日上午8:13:54   org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl   buildCreator信息:HHH10001003:自动提交模式:假2019年7月13日   上午8:13:54   org.hibernate.engine.jdbc.connections.internal.PooledConnections    信息:HHH000115:休眠连接池大小:20(min = 1)7月   13,2019 8:13:54 AM org.hibernate.dialect.Dialect信息:   HHH000400:使用方言:org.hibernate.dialect.MySQL5Dialect 7月13日   2019 8:13:55上午   org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl   停止INFO:HHH10001008:清理连接池   [jdbc:mysql:// localhost:3306 / jpa]

Persistence.xml中的配置是否存在问题?

1 个答案:

答案 0 :(得分:0)

您应该始终提交事务,以使新记录真正插入数据库中。另一方面,如果有异常,则应回滚事务。

但是现在您在有异常的情况下提交事务,而在成功的情况下什么也不做。因此,对于成功案例,事务尚未提交,这就是为什么没有记录真正插入数据库的原因。

尝试修改您的代码,使其看起来像以下内容。关键是在最后提交事务:

   public static void main(String args[]){
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("Student_details");
        EntityManager em = emf.createEntityManager();
        em.getTransaction().begin();
        try{
           StudentEntity s = new StudentEntity();
           s.setS_id(101);
           s.setS_name("Ram");
           s.setS_fee("5000");
           em.persist(s);
           em.getTransaction().commit();
        }
        catch(Exception e) {
            em.getTransaction().rollback();
         }finally{
           em.close();
           emf.close();
         }
    }