【发布时间】:2021-03-30 20:14:12
【问题描述】:
我正在尝试使用 Java 从 Netbeans 连接 Myqsl 数据库。我使用持久性。我设法创建持久性:我连接到数据库并从基础获取实体和 JPA 控制器,但在我的程序中我想记录、编辑或删除数据库中的数据,而这就是程序不起作用的地方.它直接进入 catch 并且不执行 try。
我使用 Netbeans 12.1、Mysql 8.0、Mysql 连接器 mysql-connector-java-8.0.22、JDK 13 和 EclipseLink 库 (JPA 2.1),但我无法写入数据库。我认为问题出在连接器上。我在 8.0.22 之前使用过很多版本,但同样的事情发生在我身上。我设法获得了该数据,但我无法修改数据库。这是persistence.xml:
<?xml version="1.0" encoding="UTF-8"?>
<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="OtraBasePU" transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<properties>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/ladb?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC"/>
<property name="javax.persistence.jdbc.user" value="dferazo"/>
<property name="javax.persistence.jdbc.driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="javax.persistence.jdbc.password" value="dferazo1234"/>
<property name="javax.persistence.schema-generation.database.action" value="create"/>
</properties>
</persistence-unit>
</persistence>
这是试图进行更改的文件,问题是它直接进入 cathc:
public class gestionAsignatura {
private AsignaturaJpaController gestAsignatura = new AsignaturaJpaController();
private Asignatura asignatura = new Asignatura();
private String mensaje = "";
public String insertarAsignatura(int id, String nombre, String codigo) {
try {
asignatura.setIdAsignatura(id);
asignatura.setCodigoAsignatura(codigo);
asignatura.setNombreAsignatura(nombre);
gestAsignatura.create(asignatura);
mensaje = "Se guardó.";
} catch (Exception e) {
System.out.println("Mensaje insertar: " + e.getMessage());
mensaje = "No se guardó.";
}
return mensaje;
}
public String actualizarAsignatura(int id, String nombre, String codigo) {
try {
asignatura.setIdAsignatura(id);
asignatura.setNombreAsignatura(nombre);
asignatura.setCodigoAsignatura(codigo);
gestAsignatura.edit(asignatura);
mensaje = "Se actualizó.";
} catch (Exception e) {
System.out.println("Mensaje insertar: " + e.getMessage());
mensaje = "No se actualizó.";
}
return mensaje;
}
public String eliminarAsignatura(int id) {
try {
gestAsignatura.destroy(id);
mensaje = "Se eliminó";
} catch (Exception e) {
System.out.println("Mensaje eliminar: " + e.getMessage());
mensaje = "No se eliminó";
}
return mensaje;
}
}
它没有给我错误,但这会出现在控制台中:
run:
[EL Info]: 2020-12-20 19:24:16.005--ServerSession(341853399)--EclipseLink, version: Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd
[EL Info]: connection: 2020-12-20 19:24:16.43--ServerSession(341853399)--file:/C:/Users/cuera/Documents/NetBeansProjects/OtraBase/build/classes/_OtraBasePU login successful
[EL Warning]: metamodel: 2020-12-20 19:24:16.453--The collection of metamodel types is empty. Model classes may not have been found during entity search for Java SE and some Java EE container managed persistence units. Please verify that your entity classes are referenced in persistence.xml using either <class> elements or a global <exclude-unlisted-classes>false</exclude-unlisted-classes> element
Mensaje insertar: Unknown entity bean class: class entidad.Asignatura, please verify that this class has been marked with the @Entity annotation.
No se guardó.
BUILD SUCCESSFUL (total time: 1 second)
这是文件结构:
【问题讨论】:
-
连接器出现故障的可能性很小。相反,我认为问题在于您没有使用
@Entity注释标记实体类,或者您的persistence.xml文件不正确......根据控制台上的消息。