структура папок в затмении
Ansatt означает «Сотрудник», а Brukernavn означает «Имя пользователя». Просто к твоему сведению, на норвежском.
Я следую короткому руководству, которое мой лектор дал нам о том, как подключиться к серверу Postgres. Я создал новую схему / таблицу в Postgres и добавил тестовое поле, чтобы проверить, работает ли мой код Java. Простой метод в основном классе должен распечатать два поля из базы данных, добавленной из сценария sql. Однако я получаю сообщение об ошибке при попытке получить эту информацию теста от Postgres. Что-то не так с тем, как мой код ищет и идентифицирует сущности. В моем случае Ансатт, но я не могу понять, что.
main и способ печати id и brukernavn (имя пользователя):
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;
}
}
Команды sql, которые я использовал для создания таблицы и схемы в postgres:
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 Warning]: метамодель: 2019-04-08 19: 37: 17.834 - Коллекция типов метамоделей пуста. Классы моделей, возможно, не были найдены во время поиска сущностей для Java SE и некоторых модулей персистентности, управляемых контейнером Java EE. Убедитесь, что на ваши классы сущностей ссылаются в persistence.xml, используя либо элементы, либо глобальный элемент false
Исключение в потоке "main" java.lang.IllegalArgumentException:
Неизвестный класс EJB-компонента Entity: класс assign3.Ansatt. Убедитесь, что этот класс помечен аннотацией @Entity.
at org.eclipse.persistence.internal.jpa.EntityManagerImpl.find (EntityManagerImpl.java:810)
at org.eclipse.persistence.internal.jpa.EntityManagerImpl.find (EntityManagerImpl.java:688)
в обязательном порядке.
по адресу обязательно3.KommunisereMedDatabaseEnklere.main (KommunisereMedDatabaseEnklere.java:11)