JPA/Hibernate事务问题
我希望我能用选项表生成主键,但我不明白为什么事务不能工作。 这是我的环境(这是一个示例,不是真正的应用程序,但更容易解释): SGBD:MySql 数据库:用于生成主键的emp、作业、部门(Oracle示例)和PKEY ORM:JPA与Hibernate 企业应用程序:EmployeeJPA,包含两个模块:EmployeeJPA ejb和EmployeeJPA war EJB实体:雇员JPA/Hibernate事务问题,hibernate,jpa,Hibernate,Jpa,我希望我能用选项表生成主键,但我不明白为什么事务不能工作。 这是我的环境(这是一个示例,不是真正的应用程序,但更容易解释): SGBD:MySql 数据库:用于生成主键的emp、作业、部门(Oracle示例)和PKEY ORM:JPA与Hibernate 企业应用程序:EmployeeJPA,包含两个模块:EmployeeJPA ejb和EmployeeJPA war EJB实体:雇员 @Entity @Table(name = "employee") @XmlRootElement @Name
@Entity
@Table(name = "employee")
@XmlRootElement
@NamedQueries({
@NamedQuery(name = "Employee.findAll", query = "SELECT e FROM Employee e"),
@NamedQuery(name = "Employee.findByEmployeeId", query = "SELECT e FROM Employee e WHERE e.employeeId = :employeeId"),
@NamedQuery(name = "Employee.findByName", query = "SELECT e FROM Employee e WHERE e.name = :name"),
@NamedQuery(name = "Employee.findByManagerId", query = "SELECT e FROM Employee e WHERE e.managerId = :managerId"),
@NamedQuery(name = "Employee.findByHiredate", query = "SELECT e FROM Employee e WHERE e.hiredate = :hiredate"),
@NamedQuery(name = "Employee.findBySalary", query = "SELECT e FROM Employee e WHERE e.salary = :salary")})
public class Employee implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@TableGenerator(name="EmployeePk", table="pkeys", pkColumnName="pkey_id",
valueColumnName="pkey_val", pkColumnValue="EMPLOYEE", allocationSize=1)
@GeneratedValue(strategy=GenerationType.TABLE, generator="EmployeePk")
@Basic(optional = false)
@NotNull
@Column(name = "employee_id")
private Integer employeeId;
. . .
EJB会话EmployeeFacade
@Stateless
@LocalBean
@TransactionManagement(TransactionManagementType.CONTAINER)
public class EmployeeFacade {
@PersistenceContext(unitName = "EmployeesJPA-ejbPU")
private EntityManager em;
@EJB
JobFacade jobFacade;
@EJB
DepartmentFacade departmentFacade;
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public void addEmployee(String name, Date hiredate, double salary, int jobId, int departmentId, int managerId) throws Exception {
Employee employee = new Employee();
try{
Department department = departmentFacade.getDepartmentById(departmentId);
Job job = jobFacade.getJobById(jobId);
employee.setDepartment(department);
employee.setJob(job);
employee.setHiredate(hiredate);
employee.setManagerId(managerId);
employee.setName(name);
em.persist(employee);
}catch(Exception ex){
throw ex;
}
}
}
Servlet SrvlEmployee
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String error = null;
try {
Date hiredate = Utilitaire.StrToDate("2020-02-01", "yyyy-MM-dd");
employeeFacade.addEmployee("Smith", hiredate, 2000.00, 2, 3, 4);
} catch (Exception e) {
error = Utilitaire.getExceptionCause(e);
} finally {
request.setAttribute("errorR", error);
RequestDispatcher dsp = request.getRequestDispatcher("/index.jsp");
dsp.forward(request, response);
}
}
桌子摆在前面
桌子在后面
表employee的最后一个id是14
请求返回错误消息:
Hibernate:选择department0\u.department\u id作为Department1\u 0\u 0\u,department0\u.dname作为dname2\u 0\u,department0\u.location作为location3\u 0\u来自department0\u,其中department0\u.department\u id=
休眠:从job job0中选择job0。job_id作为job_id1_2_0,job0。jobname作为jobname2_2_0,其中job0。job_id=
Hibernate:从pkeys中选择pkey_val,其中pkey_id='EMPLOYEE'进行更新
Hibernate:更新pkeys set pkey_val=?其中pkey_val=?而pkey_id='EMPLOYEE'
Hibernate:插入员工(部门id、雇用日期、职务id、经理id、姓名、工资、员工id)值(?、、、、、、、、?)
SQL错误:1062,SQLState:23000
键“PRIMARY”的重复条目“14”
似乎不仅有一笔交易,还有两笔交易,但我不明白为什么!
我的错误在哪里?
谢谢你的帮助 这在EclipseLink和j2ee.platform 1.6中运行良好!!!???有人会反抗吗?还有j2ee.1.7平台