java - JPA 2.0 没有持久化到 MySQL 中

标签 java mysql eclipse hibernate jpa

我是 JPA 2.0 API 的新手,我正在尝试启动 JPA 到 Mysql 事务,但我能够这样做。而且我没有收到任何错误。

打包com.testjpa.demo;

import java.io.Serializable;
import javax.persistence.*;

/**
 * The persistent class for the employee database table.
 * 
 */
@Entity
public class Employee implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;

    private String name;

    public Employee() {
    }

    public Employee(int id) {
        this.id = id;
    }

    public int getId() {
        return this.id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return this.name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

执行CRUD操作的方法

    package com.testjpa.demo;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.TypedQuery;

public class EmployeeService {

    /**
     * @param args
     */
    protected EntityManager em;

    public EmployeeService(EntityManager em) {
        this.em = em;

    }

    public Employee findEmployee(int id) {
        return em.find(Employee.class, id);
    }

    public Employee createEmployee(int id, String name) {
        Employee emp = new Employee(id);
        emp.setName(name);
        return emp;
    }

    public void removeEmployee(int id) {
        Employee emp = findEmployee(id);
        if (emp != null) {
            em.remove(emp);
        }
    }

    public List<Employee> findAllEmployees() {
        TypedQuery<Employee> query = em.createQuery("select e from Employee e",
                Employee.class);
        return query.getResultList();
    }
}
    Test Class to persist the data into MysQL

打包com.testjpa.demo;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

public class EmployeeTest {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        EntityManagerFactory emf = Persistence
                .createEntityManagerFactory("JPADemo");
        EntityManager em = emf.createEntityManager();
        EmployeeService service = new EmployeeService(em);
        // create and persist an employee
        em.getTransaction().begin();
        Employee emp = service.createEmployee(2, "John Doe");
        em.getTransaction().commit();
        System.out.println("Persisted " + emp);

        emp = service.findEmployee(2);
        System.out.println("Found " + emp);

    }

}

非常感谢您的建议,因为我是这个 API 的新手

还有 Persistence.xml

<?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="JPADemo" transaction-type="RESOURCE_LOCAL">
        <class>com.testjpa.demo.Employee</class>
        <properties>
            <property name="eclipselink.jdbc.batch-writing" value="JDBC"/>
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/world"/>
            <property name="javax.persistence.jdbc.user" value="root"/>
            <property name="javax.persistence.jdbc.password" value="123456"/>
            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
        </properties>
    </persistence-unit>
</persistence>

最佳答案

在您的 createEmployee 方法中,您正在实例化一个新的 Employee POJO,但您从未将它与 EntityManager 持久化,因此 Hibernate 不知道它。尝试添加:

em.persist(emp);

关于java - JPA 2.0 没有持久化到 MySQL 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19597348/

相关文章:

javascript - ajax(xmlhttprequest)发送的每个请求都可以称为Web服务请求吗?

c++ - C++ 的 OpenGL 实现列表

java - eclipse luna 不支持 glassfish?

java - CompletableFuture 是一个 Monad。但应用性在哪里呢?

java - 使用 Jackson 与 Java Mongo DBObject 进行高效 POJO 映射

java - JSONObject.toString : how NOT to escape slashes

mysql - 如果我将 bigint unsigned 设置为 mysql 上 myisam 表的主键,是否存在一些性能问题?

mysql - SQL 组合查询中的行

java - 更新表中的数据

android - JNI 与安卓?