我正在尝试使用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中的配置是否存在问题?
答案 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();
}
}