我是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);

10-06 11:34