1

我是 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>
4

1 回答 1

0

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

em.persist(emp);
于 2013-10-25T19:43:05.123 回答