java - 为什么我的代码在尝试从 Postgres 读取时无法识别任何实体?
问题描述
Ansatt 表示员工,Brukernavn 表示用户名。仅供参考,在挪威语中。
我正在学习我的讲师给我们的关于如何连接到 Postgres 服务器的简短教程。我在 Postgres 中创建了一个新的模式/表,并添加了一个测试字段来查看我的 java 代码是否有效。主类中的简单方法应该打印出从 sql 脚本添加的数据库中的两个字段。但是,当我尝试从 Postgres 获取此测试信息时收到一条错误消息。我的代码搜索和识别实体的方式有问题。就我而言,安萨特,但我不知道是什么。
打印 id 和 brukernavn(username) 的主要方法和方法:
package oblig3;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
public class KommunisereMedDatabaseEnklere {
public static void main(String[] args) {
Ansatt a = finnAnsattMedId(101);
System.out.println(a);
}
public static Ansatt finnAnsattMedId(int id) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("AnsattPersistenceUnit");
EntityManager em = emf.createEntityManager();
Ansatt a = null;
try {
a = em.find(Ansatt.class, id);
} finally {
em.close();
}
return a;
}
}
xml 文件,认为问题一定出在某处:
<?xml version ="1.0"encoding="UTF-8"?>
<persistence 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_2.xsd"
version="2.2">
<persistence-unit name="AnsattPersistenceUnit" transaction-type="RESOURCE_LOCAL">
<class>oblig3.Ansatt</class>
<properties>
<!--GenerelleJPA properties -->
<property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver"/>
<property name="javax.persistence.jdbc.url"
value="jdbc:postgresql://*******/*******" />
<property name="javax.persistence.jdbc.user" value="*******"/>
<property name="javax.persistence.jdbc.password" value="*******"/>
<!--EclipseLink properties -->
<!--Sehttps://wiki.eclipse.org/EclipseLink/Examples/JPA/Logging -->
<property name="eclipselink.logging.level" value="WARNING"/>
</properties>
</persistence-unit>
</persistence>
在数据库中用作@Entity 的类:
package oblig3;
import javax.persistence.*;
@Entity
@Table (name = "Ansatt", schema = "oblig3_jpa")
@NamedQuery (name = "hentAlleAnsatte", query = "SELECT a FROM Ansatt a")
public class Ansatt {
@Id private int id;
private String brukernavn;
public Ansatt() {
}
public Ansatt(int id, String brukernavn) {
this.id = id;
this.brukernavn = brukernavn;
}
public void setId(int id) {
this.id = id;
}
public int getId() {
return id;
}
public void setBrukernavnd(String brukernavn) {
this.brukernavn = brukernavn;
}
public String getBrukernavn() {
return brukernavn;
}
}
我用来在 postgres 中创建表和模式的 sql 命令:
DROP SCHEMA IF EXISTS oblig3_jpa CASCADE;
CREATE SCHEMA oblig3_jpa;
SET search_path to oblig3_jpa;
CREATE TABLE Ansatt
(
id INT,
brukernavn VARCHAR(4),
PRIMARY KEY (id)
);
insert into Ansatt (id, brukernavn)
values (101, 'spsh')
该代码应该在控制台上打印这样的内容: [101, spsh]
我得到:[EL 警告]:元模型:2019-04-08 19:37:17.834--元模型类型的集合是空的。在对 Java SE 和某些 Java EE 容器管理的持久性单元进行实体搜索期间,可能未找到模型类。请验证您的实体类是否在persistence.xml中使用元素或全局错误元素在线程“main”java.lang.IllegalArgumentException中引用异常:未知实体bean类:类oblig3.Ansatt,请验证该类已被标记带有@Entity 注释。
在 org.eclipse.persistence.internal.jpa.EntityManagerImpl.find(EntityManagerImpl.java:810)
在 org.eclipse.persistence.internal.jpa.EntityManagerImpl.find(EntityManagerImpl.java:688)
在 oblig3.KommunisereMedDatabaseEnklere.finnAnsattMedId(KommunisereMedDatabaseEnklere.java:22)
在 oblig3.KommunisereMedDatabaseEnklere.main(KommunisereMedDatabaseEnklere.java:11)
解决方案
推荐阅读
- google-cloud-platform - 如何启用 GitHub Webhook 调用 Google Cloud 函数
- sql - 有没有办法让这个自定义 SQL 导出只查看最后一天处理的订单?
- spacy - 无法从“transformers.file_utils”导入名称“_BaseLazyModule”
- python - 对 numpy 矩阵进行排序会导致值错误
- javascript - 将值推送到数组对象中
- java - 如何控制 JpaRepository 进行类似查询
- sugarcrm - SugarCRM 无效参数
- python - 美丽的汤和文件包含
标签 - google-analytics - Google Analytics 4:gtag.js 中的自定义维度
- r - 将 dplyr::group_by 应用于 ffdf 类时出错