@P_Alexander
First head

Почему не видит класс сущности? как исправить?

Начал изучать hibrnate и столкнулся с проблемой, помогите
Получаю ошибку
Exception in thread "main" org.hibernate.MappingException: Unknown entity: hibernate.pon.al.UserEntity
	at org.hibernate.metamodel.internal.MetamodelImpl.entityPersister(MetamodelImpl.java:620)
	at org.hibernate.internal.SessionImpl.getEntityPersister(SessionImpl.java:1636)
	at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:104)
	at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:192)
	at org.hibernate.event.internal.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:38)
	at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:177)
	at org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:32)
	at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:73)
	at org.hibernate.internal.SessionImpl.fireSave(SessionImpl.java:691)
	at org.hibernate.internal.SessionImpl.save(SessionImpl.java:683)
	at org.hibernate.internal.SessionImpl.save(SessionImpl.java:678)
	at hibernate.pon.al.util.Main.main(Main.java:21)

Джава класс без гетеров и сеторов и ту стринга
@Entity
@Table(name = "User", uniqueConstraints = {
        @UniqueConstraint(columnNames = "ID"),
        @UniqueConstraint(columnNames = "NICKNAME")
})
public class UserEntity implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "ID",  length = 100)
    private Integer userID;

    @Column(name = "NICKNAME", length = 100)
    private String Nname;

    @Column(name = "FIRSTNAME", unique = false, length = 100)
    private String Fname;

    @Column(name = "LASTNAME", unique = false, length = 100)
    private String Lname;

    @Column(name = "PASSWORD", unique = false, length = 100)
    private String password;

    @Column(name = "PASSWORDTWO", unique = false, length = 100)
    private String passwordTwo;

    @Column(name = "ROLE", unique = false, length = 20)
    private String role;
}

фaйл Hebrnate.cfg.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name="hibernate.connection.driver_class">org.postgresql.Driver</property>
        <property name="hibernate.connection.url">jdbc:postgresql://localhost:5432/testproj</property>
        <property name="hibernate.connection.password">root</property>
        <property name="hibernate.connection.username">alexroot</property>
        <property name="hibernate.connection.pool_size">20</property>
        <property name="hibernate.dialect">org.hibernate.dialect.PostgreSQL94Dialect</property>
        <property name="show_sql">true</property>
        <property name="hbm2ddl.auto">update</property>
        <mapping class="hibernate.pon.al.UserEntity"></mapping>
    </session-factory>
</hibernate-configuration>

class Util
public class HibernateUtil {
    private static SessionFactory sessionFactory;

    public static SessionFactory getSessionFactory(){
        if(sessionFactory == null){
Configuration configuration = new Configuration().configure("hibernate.cfg.xml");
            ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();
            sessionFactory = configuration.buildSessionFactory(serviceRegistry);
        }
        return sessionFactory;
    }

    public static void shutdown() {
        // Close caches and connection pools
        getSessionFactory().close();
    }
}


Main
SessionFactory sessionFactory =
                HibernateUtil.getSessionFactory();

        Session session = sessionFactory.openSession();
        session.beginTransaction();
        UserEntity entity = new UserEntity();
        entity.setFname("Alex");
        entity.setNname("ls");
        entity.setLname("Pon");
        entity.setPassword("qwe");
        entity.setPasswordTwo("qwe");
        entity.setRole("admin");
        session.save(entity);

        session.beginTransaction().commit();
        HibernateUtil.shutdown();
  • Вопрос задан
  • 1769 просмотров
Пригласить эксперта
Ответы на вопрос 2
sergey-gornostaev
@sergey-gornostaev Куратор тега Java
Седой и строгий
Проблема в @Table(name = "User"). User - зарезервированное слово в PostgreSQL, вы не можете использовать его для названия таблицы или поля. Переименуйте в Users, например.
Ответ написан
@alexjdev
java dev
Попробуйте поменять метод getSessionFactory на:
public static SessionFactory getSessionFactory() {
   if (sessionFactory == null) {
            Configuration configuration = new Configuration();
            configuration.configure();
            sessionFactory = configuration.buildSessionFactory();
   }
   return sessionFactory;
 }
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы