Hibernate 5.2.10 problem z SessionFactory

Odpowiedz Nowy wątek
2017-11-17 22:56

Rejestracja: 3 lata temu

Ostatnio: 8 miesięcy temu

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.

Pozostało 580 znaków

2017-11-18 11:33
Moderator

Rejestracja: 16 lat temu

Ostatnio: 6 godzin temu

0

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


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...

Pozostało 580 znaków

2017-11-18 11:48

Rejestracja: 3 lata temu

Ostatnio: 8 miesięcy temu

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.

Pozostało 580 znaków

2017-11-18 12:36

Rejestracja: 3 lata temu

Ostatnio: 8 miesięcy temu

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?

Pozostało 580 znaków

2017-11-18 14:56
Moderator

Rejestracja: 16 lat temu

Ostatnio: 6 godzin temu

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?


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...
zawsze jak czytam takie watki to zastanawiam sie jaki masz cel w tej mentalnej masturbacji.. - filemonczyk 2017-11-18 16:20
Zniechecam potencjalną konkurencje na rynku pracy. Ale nie martw sie, ciebie to nie dotyczy, ty konkurencji nie stanowisz. - Shalom 2017-11-18 16:31

Pozostało 580 znaków

2017-11-18 15:01

Rejestracja: 3 lata temu

Ostatnio: 8 miesięcy temu

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.

Pozostało 580 znaków

2017-11-18 16:18

Rejestracja: 3 lata temu

Ostatnio: 8 miesięcy temu

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.

edytowany 1x, ostatnio: mic1996, 2017-11-18 16:19
Który wyjątek? Ten z class def not found? - Shalom 2017-11-18 16:32
To jest mały problem bo powinno wystarczyc dodanie zależności od javax.xml.bind:jaxb-api. Jesteś pewien że przy zmianie hibernate na nową wersje nie podzielili jara na kilka mniejszych? W efekcie nie wystarczy podbić wersje w tej jednej zależności, ale też dodać kilka innych, które wcześniej były w niej zawarte. - Shalom 2017-11-18 16:38
Już dodawałem i sprawdzałem dosłownie wszystko, po prostu zostałem "rzucony na głęboką wodę" że tak to określę, jest to mój pierwszy kontakt z takim frameworkiem i po prostu już nie mam pomysłu co zrobić, a muszę jakoś zacząć, przy 4.3.6 jest ok, zmieniam na wersję 5.x i dodaję to o czym pisałeś i dalej to samo... - mic1996 2017-11-18 16:52

Pozostało 580 znaków

slepy
2017-11-18 17:19
slepy
0

Wydaje mi się, że problem jest w XML z konfiguracją. Jedno co mi się rzuca w oczy to "http://hibernate.sourceforge.[...]bernate-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/hibern[...]0/manual/en-US/html/ch03.html

już to zmieniłem a odnośnie drugiej sugestii to właśnie chodzi mi o naprawę tego błędu w tym konkretnym przypadku bo nie daje mi to żyć po prostu..powinno działać a coś jest nie tak a różnica jest tylko w wersji + dodałem wszystkie niezbędne zależności, - mic1996 2017-11-18 17:23

Pozostało 580 znaków

Bogaty Młot
2018-10-30 20:04
Bogaty Młot
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

Pozostało 580 znaków

Odpowiedz

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