gpt4 book ai didi

java - 无法使 jpa 与 glassfish 和 mysql 一起工作

转载 作者:行者123 更新时间:2023-11-29 21:14:56 25 4
gpt4 key购买 nike

首先,我必须将实体类从 Employee 重命名为 EMPLOYEE,因为无论出于何种原因,我遇到了错误内部异常:java.sql.SQLSyntaxErrorException:表/ View “EMPLOYEE”不存在 ,我正在使用这个类Employee,后来更名为EMPLOYEE

@Entity
public class Employee {

@Id
private int id;
private String name;
private long salary;

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

// getters, setters
}

这是持久性 xml

<persistence version="2.1" 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">
<persistence-unit name="EmployeeService" transaction-type="RESOURCE_LOCAL">
<!--<exclude-unlisted-classes>false</exclude-unlisted-classes>
-->
<class>jpa.Employee</class>
<properties>

<property name="javax.persistence.jdbc.driver" value="oracle.jdbc.OracleDriver"/>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/jpa00"/>
<property name="javax.persistence.jdbc.user" value="root"/>
<property name="javax.persistence.jdbc.password" value="123"/>

</properties>
</persistence-unit>
</persistence>

我正在使用名为 jpa00 的架构,其中包含一个具有 3 列的表 Employee:主键、无符号、非空、intid ;一个 varchar name 和一个 int salary。其余代码使用名为 EmployeeServices 的实用程序类

public class EmployeeTest {

public static void main (String[] args) {

EntityManagerFactory emf =
Persistence.createEntityManagerFactory("EmployeeService");
EntityManager em = emf.createEntityManager();
EmployeeService service = new EmployeeService(em);

// create and persist an employee
em.getTransaction().begin();
Employee emp = service.createEmployee(158, "John Doe", 45000);
em.getTransaction().commit();
System.out.println("Persisted "+emp);

// find specific employee
emp = service.findEmployee(158);
System.out.println("Found "+emp);

// find all employees
List<Employee> list = service.findAllEmployees();
for(Employee y:list)
System.out.println(y);

// update the employee
em.getTransaction().begin();
emp = service.raiseEmployeeSalary(158, 1000);
em.getTransaction().commit();
System.out.println("Updated "+emp);

// remove an employee
em.getTransaction().begin();
service.removeEmployee(158);
em.getTransaction().commit();
System.out.println("Removed employee 158");

// close the Em and EMF when done
em.close();
emf.close();

}

当我将实体类从 Employee 更改为 EMPLOYEE 并运行此命令时,我得到第一个操作 System.out.println("Persisted "+emp); 的输出,紧接着我出现此错误线程“main”java.lang.IllegalArgumentException中出现异常:未知实体bean类:类jpa.EMPLOYEE,请验证该类是否已使用@Entity注释进行标记。该类具有@实体注释,所以我不明白我做错了什么。我使用的是 NetBeans 8.1,并且已导入库 EclipseLink JPA 2.1MySQL JDBC 驱动程序。我真的不知道我应该做什么以及所有资本化的员工问题,我只是不明白这怎么可能。

最佳答案

第一;您正在尝试使用 Oracle 驱动程序连接到 MySql。 Oracle和mysql有不同的驱动程序,编辑persistence.xml来设置mysql驱动程序

第二; @Table注释可能有助于类名和表名匹配(如果你的mysql配置有区分大小写的表名,则需要它)

@Entity 
@Table(name = "EMPLOYEE")
public class Employee {

关于java - 无法使 jpa 与 glassfish 和 mysql 一起工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36024409/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com