#java #hibernate #maven
Вопрос:
Я уже проверил несколько тем, связанных с этой проблемой, но до сих пор ничего не казалось решением. Все эти ошибки должны быть устранены просто путем добавления постоянной зависимости, но в моем случае это не помогает. Я уже пытался добавить java-persistence-api 1.0.2 вместо версии 2.0.1, я также очистил свой репозиторий maven и пару раз обновил свои зависимости. Я знаком только с npm/yarn, поэтому немного знаю об устранении таких проблем в java maven. Код будет успешно запущен, если я удалю все эти уведомления о сохранении.
UserEntity.java
package Entities;
import Utils.HibernateUtil;
import org.hibernate.Session;
import org.hibernate.Transaction;
import javax.persistence.*;
import java.util.List;
@Entity
@Table(name="USER", uniqueConstraints = {
@UniqueConstraint(columnNames = "UserId"),
@UniqueConstraint(columnNames = "userEmail")
})
public class UserEntity {
@Column(name="userName", unique = false, nullable = false, length = 36)
private String userName;
@Column(name="userLogin", unique = false, nullable = false, length = 36)
private String userLogin;
@Column(name="userPassword", unique = false, nullable = false, length = 24)
private String userPassword;
@Column(name="userEmail", unique = true, nullable = false, length = 100)
private String userEmail;
@Column(name="userRole", unique = false, nullable = false, length = 12)
private Integer userRole;
@Id
@GeneratedValue(strategy= GenerationType.AUTO)
@Column(name="userId", unique = true, nullable = false)
private Integer userId;
public UserEntity(String userName, String userLogin, String userPassword, String userEmail, Integer userRole) {
this.userName = userName;
this.userLogin = userLogin;
this.userPassword = userPassword;
this.userEmail = userEmail;
this.userRole = userRole;
}
public UserEntity() {}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
@Override
public String toString() {
return "UserEntity{"
"userName='" userName '''
", userLogin='" userLogin '''
", userPassword='" userPassword '''
", userEmail='" userEmail '''
", userRole=" userRole
", userId=" userId
'}';
}
public String getUserLogin() {
return userLogin;
}
public void setUserLogin(String userLogin) {
this.userLogin = userLogin;
}
public String getUserPassword() {
return userPassword;
}
public void setUserPassword(String userPassword) {
this.userPassword = userPassword;
}
public String getUserEmail() {
return userEmail;
}
public void setUserEmail(String userEmail) {
this.userEmail = userEmail;
}
public Integer getUserRole() {
return userRole;
}
public void setUserRole(Integer userRole) {
this.userRole = userRole;
}
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
}
DBRequestController.java
package Controllers;
import Utils.HibernateUtil;
import org.hibernate.Session;
import org.hibernate.Transaction;
import java.util.List;
public class DBRequestController<T> implements IDBRequestController<T>{
private final Class<T> type;
public DBRequestController(Class<T> type) {
this.type = type;
}
public String getMyType() {
return this.type.toString().substring(15);
}
@Override
public void update(T object) {
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction transaction = session.beginTransaction();
session.update(object);
transaction.commit();
session.close();
}
@Override
public void add(T object) {
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction transaction = session.beginTransaction();
session.save(object);
transaction.commit();
session.close();
}
@Override
public void delete(T object) {
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction transaction = session.beginTransaction();
session.delete(object);
transaction.commit();
session.close();
}
@Override
public List<T> showAll() {
String hql = "from " this.getMyType();
Session session = HibernateUtil.getSessionFactory().openSession();
session.getTransaction().begin();
List<T> objects = session.createQuery(hql).getResultList();
session.getTransaction().commit();
return objects;
}
}
hibernate.cfg.xml
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
"http://www.hibernate.org/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.current_session_context_class">thread</property>
<property name="hibernate.dialect">org.hibernate.dialect.PostgreSQL94Dialect</property>
<property name="hibernate.connection.username">postgres</property>
<property name="hibernate.connection.password">12344321</property>
<property name="hibernate.connection.url">jdbc:postgresql://localhost:5432/CustomsDB</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<property name="connection.pool_size">30</property>
<property name="show_sql">true</property>
<mapping class="Entities.Cart"/>
<mapping class="Entities.UserEntity"/>
<mapping class="Entities.DeclaredUnit"/>
<mapping class="Entities.UnitDesc"/>
<mapping class="Entities.UnitType"/>
<mapping class="Entities.CartUnit"/>
</session-factory>
</hibernate-configuration>
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>org.example</groupId>
<artifactId>Server</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>15</maven.compiler.source>
<maven.compiler.target>15</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.4.29.Final</version>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.2.19</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>5.4.29.Final</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.12.3</version>
</dependency>
<dependency>
<groupId>org.hibernate.javax.persistence</groupId>
<artifactId>hibernate-jpa-2.1-api</artifactId>
<version>1.0.0.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>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
HibernateUtil.java
package Utils;
import org.hibernate.SessionFactory;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
public class HibernateUtil {
private static SessionFactory sessionFactory = buildSessionFactory();
protected static SessionFactory buildSessionFactory() {
final StandardServiceRegistry registry = new StandardServiceRegistryBuilder()
.configure()
.build();
try {
sessionFactory = new MetadataSources(registry).buildMetadata().buildSessionFactory();
} catch (Exception e) {
StandardServiceRegistryBuilder.destroy(registry);
throw new ExceptionInInitializerError("Initial SessionFactory failed" e);
}
return sessionFactory;
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
public static void shutdown() {
getSessionFactory().close();
}
}
Error
Oct 17, 2021 6:52:24 PM org.hibernate.Version logVersion
INFO: HHH000412: Hibernate ORM core version 5.4.29.Final
Oct 17, 2021 6:52:32 PM org.hibernate.annotations.common.reflection.java.JavaReflectionManager <clinit>
INFO: HCANN000001: Hibernate Commons Annotations {5.1.2.Final}
Oct 17, 2021 6:52:33 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
WARN: HHH10001002: Using Hibernate built-in connection pool (not for production use!)
Oct 17, 2021 6:52:33 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001005: using driver [null] at URL [jdbc:postgresql://localhost:5432/CustomsDB]
Oct 17, 2021 6:52:33 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001001: Connection properties: {password=****, user=postgres}
Oct 17, 2021 6:52:33 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001003: Autocommit mode: false
Oct 17, 2021 6:52:33 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections <init>
INFO: HHH000115: Hibernate connection pool size: 30 (min=1)
Oct 17, 2021 6:52:35 PM org.hibernate.dialect.Dialect <init>
INFO: HHH000400: Using dialect: org.hibernate.dialect.PostgreSQL94Dialect
Exception in thread "main" java.lang.NoSuchMethodError: 'javax.persistence.Index[] javax.persistence.Table.indexes()'
at org.hibernate.cfg.annotations.EntityBinder.processComplementaryTableDefinitions(EntityBinder.java:1238)
at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:840)
at org.hibernate.boot.model.source.internal.annotations.AnnotationMetadataSourceProcessorImpl.processEntityHierarchies(AnnotationMetadataSourceProcessorImpl.java:248)
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess$1.processEntityHierarchies(MetadataBuildingProcess.java:239)
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:282)
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.build(MetadataBuildingProcess.java:86)
at org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:479)
at org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:85)
at org.hibernate.boot.MetadataSources.buildMetadata(MetadataSources.java:202)
at Utils.HibernateUtil.buildSessionFactory(HibernateUtil.java:17)
at Utils.HibernateUtil.<clinit>(HibernateUtil.java:10)
at Controllers.DBRequestController.add(DBRequestController.java:31)
at Program.main(Program.java:9)