【问题标题】:Entity table not created using Entity manager未使用实体管理器创建实体表
【发布时间】:2019-11-23 01:11:02
【问题描述】:

我正在尝试使用 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 信息:HHH000412:休眠 核心 {5.1.0.Final} 2019 年 7 月 13 日上午 8:13:53 org.hibernate.cfg.Environment 信息: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 信息:HCANN000001:Hibernate Commons 注释 {5.0.1.Final} 2019 年 7 月 13 日上午 8:13:53 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl 配置 WARN: HHH10001002: Using Hibernate built-in connection pool (不用于生产!)2019 年 7 月 13 日上午 8:13:54 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator INFO: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, 密码=****} 2019 年 7 月 13 日上午 8:13:54 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator 信息:HHH10001003:自动提交模式:false 2019 年 7 月 13 日 上午 8 点 13 分 54 秒 org.hibernate.engine.jdbc.connections.internal.PooledConnections 信息:HHH000115:休眠连接池大小:20 (min=1) 2019 年 1 月 13 日上午 8:13:54 org.hibernate.dialect.Dialect 信息: HHH000400:使用方言:org.hibernate.dialect.MySQL5Dialect 7 月 13 日, 2019 上午 8 点 13 分 55 秒 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl 停止信息:HHH10001008:清理连接池 [jdbc:mysql://localhost:3306/jpa]

我在 Persistence.xml 中的配置有问题吗?

【问题讨论】:

    标签: jpa


    【解决方案1】:

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

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

    尝试修改您的代码,使其如下所示。重点是在最后提交事务:

       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();
             }
        }
    

    【讨论】:

      猜你喜欢
      • 2014-09-13
      • 1970-01-01
      • 2016-02-25
      • 2018-04-26
      • 2013-04-14
      • 1970-01-01
      • 2012-06-28
      • 1970-01-01
      • 2019-01-27
      相关资源
      最近更新 更多