Hibernate 5.2.10 problem z SessionFactory

0

Cześć, od dwóch dni staram się uruchomić przykładowy projekt w mavenie z użyciem hibernate. Ogólnie wszystko działało na starszej wersji, jednak, gdy użyłem hibernate 5(zmieniłem również funkcję getSessionFactory() jednak jest ona dobra) ciągle mam taki komunikat:

Enitial SessionFactory creation failedorg.hibernate.internal.util.config.ConfigurationException: Unable to perform unmarshalling at line number 0 and column 0 in RESOURCE hibernate.cfg.xml. Message: null

mój plik hibernate.cfg.xml:


<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
        "//Hibernate/Hibernate Configuration DTD//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-5.0.dtd">
<hibernate-configuration>
<session-factory>
    <property name="hibernate.connection.driver_class">org.postgresql.Driver</property>
    <property name="hibernate.connection.url">jdbc:postgresql://127.0.0.1:5432/postgres</property>
    <property name="hibernate.connection.username">postgres</property>
    <property name="hibernate.connection.password">123</property>
    <property name="hibernate.connection.pool_size">10</property>
    <property name="show_sql">true</property>
    <property name="dialect">org.hibernate.dialect.PostgreSQL82Dialect</property>
    <property name="hibernate.current_session_context_class">thread</property>
    <mapping class="pl.example.Employee" />
</session-factory>
</hibernate-configuration>


W kodzie jest wszystko dobrze, a jeśli chodzi o funkcję getSessionFactory() to wygląda ona u mnie jak w każdym przykładzie, poradniku itd. dla hibernate 5.

0

A jesteś pewien że ten plik xml nie ma jakiegoś newline na początku albo spacji?

0

Wszystko sprawdziłem 10 razy, po prostu nie mogę żadnego przykładowego projektu uruchomić ,gdy używam hibernate 5, bo z hibernate 4 nie ma problemu.

0

Robię przykład z poradnika , mam tylko 3 klasy i plik hibernate.cfg.xml w resources.

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "employee")
public class Employee implements Serializable{

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="id")
    private int id;

    @Column(name="emp_name")
    private String empName;

    @Column(name="emp_address")
    private String empAddress;

    @Column(name="emp_mobile_nos")
    private String empMobileNos;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getEmpName() {
        return empName;
    }

    public void setEmpName(String empName) {
        this.empName = empName;
    }

    public String getEmpAddress() {
        return empAddress;
    }

    public void setEmpAddress(String empAddress) {
        this.empAddress = empAddress;
    }

    public String getEmpMobileNos() {
        return empMobileNos;
    }

    public void setEmpMobileNos(String empMobileNos) {
        this.empMobileNos = empMobileNos;
    }

}
import org.hibernate.Session;
import org.hibernate.SessionFactory;

public class CreateData {
    public static void main(String[] args) throws Exception {

        SessionFactory sessFact = HibernateUtil.getSessionFactory();
        Session session = sessFact.getCurrentSession();
        org.hibernate.Transaction tr = session.beginTransaction();
        Employee emp = new Employee();
        emp.setEmpName("Deepak Kumar");
        emp.setEmpMobileNos("000000");
        emp.setEmpAddress("Delhi - India");
        session.save(emp);
        tr.commit();
        System.out.println("Successfully inserted");
        sessFact.close();
    }

}

import org.hibernate.SessionFactory;
import org.hibernate.boot.Metadata;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.service.ServiceRegistry;



public class HibernateUtil {
    private static final SessionFactory sessionFactory;

    private static ServiceRegistry serviceRegistry;

    static {
        try {
            StandardServiceRegistry standardRegistry =
                    new StandardServiceRegistryBuilder().configure("hibernate.cfg.xml").build();
            Metadata metaData =
                    new MetadataSources(standardRegistry).getMetadataBuilder().build();
            sessionFactory = metaData.getSessionFactoryBuilder().build();
        } catch (Throwable th) {

            System.err.println("Enitial SessionFactory creation failed" + th);
            throw new ExceptionInInitializerError(th);

        }
    }
    public static SessionFactory getSessionFactory() {

        return sessionFactory;

    }
}

I wyjątek:

Enitial SessionFactory creation failedjava.lang.NoClassDefFoundError: javax/xml/bind/JAXBException
Exception in thread "main" java.lang.ExceptionInInitializerError

Próbowałem już dodawania różnych bibliotek jednak nadal nic nie pomaga, a jest to prosty przykład który powinien działać praktycznie od razu. Ma ktoś jakiś pomysł co może być źle?

0

java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException

Czyli brakuje ci biblioteki w zależnościach.

Ma ktoś jakiś pomysł co może być źle?

Generalnie nie masz pojęcia co robisz, ściągasz jakieś losowe kody i próbujesz coś z tego posklejać. Ściągnij może jakiś kompletny kod z githuba, który działa?

0
Shalom napisał(a):

java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException

Czyli brakuje ci biblioteki w zależnościach.

Ma ktoś jakiś pomysł co może być źle?

Generalnie nie masz pojęcia co robisz, ściągasz jakieś losowe kody i próbujesz coś z tego posklejać. Ściągnij może jakiś kompletny kod z githuba, który działa?

To jest przykład który wziąłem już w ostateczności, wcześniej napisałem sam prosty projekt z użyciem hibernate 4 i wszystko działało, jednak po zmienieniu na hibernate 5 i odpowiednio zmodyfikowaniu funkcji odnośnie getSessionFactory() dostałem taki wyjątek, ok spróbuję zrobić tak jak mówisz.

0

Może jeszcze raz sformułuję pytanie, co należy zmienić aby użyć wersji 5 zamiast 4, chodzi mi tylko o funkcję getSesssionFactory, bo z tego co czytam to tylko to muszę zmienić w swoim przykładzie(tym który napisałem i działa na wersji 4.3.6), jednak gdy to robię od razu mam powyższy wyjątek.

Kod który działa przy 4.3.6 .

 private static SessionFactory getSessionFactory() {
        Configuration configuration = new Configuration().configure();
        StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder()
                .applySettings(configuration.getProperties());
        SessionFactory sessionFactory = configuration.buildSessionFactory(builder.build());
        return sessionFactory;
    }

Zmieniam na wersję 5.x.x:

  private static SessionFactory getSessionFactory() {

        if (sessionFactory == null) {
            Configuration configuration = new Configuration().configure();
            ServiceRegistry serviceRegistry
                    = new StandardServiceRegistryBuilder()
                    .applySettings(configuration.getProperties()).build();
            sessionFactory = configuration.buildSessionFactory(serviceRegistry);
        }

        return sessionFactory;
    }

I otrzymuję powyższy wyjątek.

0

Wydaje mi się, że problem jest w XML z konfiguracją. Jedno co mi się rzuca w oczy to "http://hibernate.sourceforge.net/hibernate-configuration-5.0.dtd", gdzie z tego co widzę w dokumentacji powinno być ...hibernate-configuration-3.0.dtd. Może spróbuj skonfigurować za pomocą pliku properties lub na podstawie https://docs.jboss.org/hibernate/orm/5.0/manual/en-US/html/ch03.html

0
Shalom napisał(a):

java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException

Czyli brakuje ci biblioteki w zależnościach.

Ma ktoś jakiś pomysł co może być źle?

Generalnie nie masz pojęcia co robisz, ściągasz jakieś losowe kody i próbujesz coś z tego posklejać. Ściągnij może jakiś kompletny kod z githuba, który działa?

Zawsze się znajdzie taki buc, który tylko sobie znanym sposobem sprawia, że nikt go nie lubi

1 użytkowników online, w tym zalogowanych: 0, gości: 1