Exception in thread "main" java.lang.ExceptionInInitializerError Caused by: javax.persistence.PersistenceException: [PersistenceUnit: MyUnit] Unable to build Hibernate SessionFactory at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.persistenceException(EntityManagerFactoryBuilderImpl.java:1597) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1503) at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:56) at java.persistence@2.2/javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:79) at java.persistence@2.2/javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54) at com.example.Main/com.example.Main.TestHibernate.(TestHibernate.java:11) Caused by: org.hibernate.MappingException: Could not instantiate persister org.hibernate.persister.entity.SingleTableEntityPersister at org.hibernate.persister.internal.PersisterFactoryImpl.createEntityPersister(PersisterFactoryImpl.java:112) at org.hibernate.persister.internal.PersisterFactoryImpl.createEntityPersister(PersisterFactoryImpl.java:77) at org.hibernate.metamodel.internal.MetamodelImpl.initialize(MetamodelImpl.java:181) at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:319) at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:471) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1498) ... 4 more Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make field private long com.example.Main.Database.Test.id accessible: module com.example.Main does not "opens com.example.Main.Database" to unnamed module @7f1302d6 at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:354) at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297) at java.base/java.lang.reflect.Field.checkCanSetAccessible(Field.java:178) at java.base/java.lang.reflect.Field.setAccessible(Field.java:172) at org.hibernate.internal.util.ReflectHelper.ensureAccessibility(ReflectHelper.java:418) at org.hibernate.internal.util.ReflectHelper.findField(ReflectHelper.java:408) at org.hibernate.property.access.internal.PropertyAccessFieldImpl.(PropertyAccessFieldImpl.java:34) at org.hibernate.property.access.internal.PropertyAccessStrategyFieldImpl.buildPropertyAccess(PropertyAccessStrategyFieldImpl.java:26) at org.hibernate.tuple.PropertyFactory.getGetter(PropertyFactory.java:341) at org.hibernate.tuple.PropertyFactory.buildIdentifierAttribute(PropertyFactory.java:67) at org.hibernate.tuple.entity.EntityMetamodel.(EntityMetamodel.java:142) at org.hibernate.persister.entity.AbstractEntityPersister.(AbstractEntityPersister.java:613) at org.hibernate.persister.entity.SingleTableEntityPersister.(SingleTableEntityPersister.java:126) at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) at org.hibernate.persister.internal.PersisterFactoryImpl.createEntityPersister(PersisterFactoryImpl.java:96) ... 9 more
Test.java
@Entity
public class Test
{
@Id
@GeneratedValue
private long id;
private String imie;
private String nazwisko;
public Test(long id, String imie, String nazwisko)
{
this.id = id;
this.imie = imie;
this.nazwisko = nazwisko;
}
public Test()
{
}
public long getId()
{
return id;
}
public void setId(long id)
{
this.id = id;
}
public String getImie()
{
return imie;
}
public void setImie(String imie)
{
this.imie = imie;
}
public String getNazwisko()
{
return nazwisko;
}
public void setNazwisko(String nazwisko)
{
this.nazwisko = nazwisko;
}
@Override
public String toString()
{
return "Test{" +
"id=" + id +
", imie='" + imie + '\'' +
", nazwisko='" + nazwisko + '\'' +
'}';
}
}
TestService.java
public class TestService
{
//Nie dziala
public void addUser(String imie, String nazwisko)
{
Test test = new Test();
test.setImie(imie);
test.setNazwisko(nazwisko);
EntityManager entityManager = TestHibernate.getFactory().createEntityManager();
EntityTransaction entityTransaction = entityManager.getTransaction();
entityTransaction.begin();
entityManager.persist(test);
entityTransaction.commit();
}
public Test findOne(long id) {
EntityManager entityManager = TestHibernate.getFactory().createEntityManager();
return entityManager.find(Test.class, id);
}
}
TestHibernate.java
public class TestHibernate
{
private static final EntityManagerFactory FACTORY =
Persistence.createEntityManagerFactory("MyUnit");
public static void main(String[] args)
{
TestService testService = new TestService();
testService.findOne(1);
}
public static EntityManagerFactory getFactory()
{
return FACTORY;
}
}
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId> <!-- To moze miec wplyw -->
<artifactId>Game</artifactId>
<version>1.0-SNAPSHOT</version>
<name>Game</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<junit.version>5.8.1</junit.version>
<!--DODANIE PROPERTIES -->
<maven.compiler.source>16</maven.compiler.source>
<maven.compiler.target>16</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>18-ea+6</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-fxml</artifactId>
<version>18-ea+6</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.openjfx/javafx.media -->
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-media</artifactId>
<version>18.0.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.postgresql/postgresql -->
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.3.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.6.9.Final</version>
<type>pom</type>
</dependency>
<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-entitymanager -->
<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-entitymanager -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>5.6.9.Final</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>17</source>
<target>17</target>
</configuration>
</plugin>
<plugin>
<groupId>org.openjfx</groupId>
<artifactId>javafx-maven-plugin</artifactId>
<version>0.0.8</version>
<executions>
<execution>
<!-- Default configuration for running with: mvn clean javafx:run -->
<id>default-cli</id>
<configuration>
<mainClass>com.example.game/com.example.game.StartLoginApplication</mainClass>
<launcher>app</launcher>
<jlinkZipName>app</jlinkZipName>
<jlinkImageName>app</jlinkImageName>
<noManPages>true</noManPages>
<stripDebug>true</stripDebug>
<noHeaderFiles>true</noHeaderFiles>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="MyUnit" transaction-type="RESOURCE_LOCAL"> <!-- Tutaj nazwa MyUnit - wyrzuca blad -->
<!-- Persistence provider -->
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<!-- Entity classes -->
<class>com.example.Main.Database.Test</class>
<properties>
<!-- Musisz pozmieniac na swoje dane -->
<!-- The JDBC driver of your database -->
<property name="javax.persistence.jdbc.driver"
value="org.postgresql.Driver" />
<!-- The JDBC URL to the database instance -->
<property name="javax.persistence.jdbc.url"
value="jdbc:postgresql://localhost:5432/Nowa" />
<!-- The database username -->
<property name="javax.persistence.jdbc.user" value="postgres" />
<!-- The database password -->
<property name="javax.persistence.jdbc.password" value="Bakalie37" />
</properties>
</persistence-unit>
</persistence>
It's weird, cause in the similar project I haven't problems with that. Second project without problems:
Company.java
@Entity
public class Company {
@Id
@GeneratedValue
private Long id;
private String name;
private int age;
private String address;
private double salary;
public Company() {
}
public Company(Long id, String name, int age, String address, double salary) {
this.id = id;
this.name = name;
this.age = age;
this.address = address;
this.salary = salary;
}
public Company(String name, int age, String address, double salary) {
this.name = name;
this.age = age;
this.address = address;
this.salary = salary;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
@Override
public String toString() {
return "Company{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
", address='" + address + '\'' +
", salary=" + salary +
'}';
}
}
CompanyService.java
public class CompanyService {
public Company findOne(long id) {
EntityManager entityManager = Main.getFactory().createEntityManager();
return entityManager.find(Company.class, id);
}
public void addCompany(String name, int age, String address, double salary) {
Company company = new Company();
company.setName(name);
company.setAge(age);
company.setAddress(address);
company.setSalary(salary);
EntityManager entityManager = Main.getFactory().createEntityManager();
EntityTransaction transaction = entityManager.getTransaction();
transaction.begin();
entityManager.contains(company);
transaction.commit();
}
public List<Company> findByName(String name) {
EntityManager entityManager = Main.getFactory().createEntityManager();
Query query = entityManager.createQuery("select c from Company c where c.name='" + name + "'");
return query.getResultList();
}
public List<Company> findAll() {
EntityManager entityManager = Main.getFactory().createEntityManager();
Query query = entityManager.createQuery("select c from Company c");
return query.getResultList();
}
public void updateCompanyName(long id, String name) {
EntityManager entityManager = Main.getFactory().createEntityManager();
Company company = entityManager.find(Company.class, id);
EntityTransaction transaction = entityManager.getTransaction();
transaction.begin();
company.setName(name);
entityManager.merge(company);
transaction.commit();
}
public void delete(long id) {
EntityManager entityManager = Main.getFactory().createEntityManager();
Company company = entityManager.find(Company.class, id);
EntityTransaction transaction = entityManager.getTransaction();
transaction.begin();
entityManager.remove(company);
transaction.commit();
}
}
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>groupId</groupId>
<artifactId>JPAZad1</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>16</maven.compiler.source>
<maven.compiler.target>16</maven.compiler.target>
</properties>
<dependencies>
<!-- https://mvnrepository.com/artifact/org.postgresql/postgresql -->
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.3.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.6.9.Final</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-entitymanager -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>5.6.9.Final</version>
</dependency>
</dependencies>
</project>
persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="MyUnit" transaction-type="RESOURCE_LOCAL">
<!-- Persistence provider -->
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<!-- Entity classes -->
<class>com.company.Donica.Company</class>
<properties>
<!-- The JDBC driver of your database -->
<property name="javax.persistence.jdbc.driver"
value="org.postgresql.Driver" />
<!-- The JDBC URL to the database instance -->
<property name="javax.persistence.jdbc.url"
value="jdbc:postgresql://localhost:5432/Nowa" />
<!-- The database username -->
<property name="javax.persistence.jdbc.user" value="postgres" />
<!-- The database password -->
<property name="javax.persistence.jdbc.password" value="Bakalie37" />
</properties>
</persistence-unit>
</persistence>