Ошибка при попытке использовать спящие аннотации - PullRequest
1 голос
/ 03 марта 2010

Ошибка, которую я получаю, указана здесь .

Это мой HibernateUtil.java

package com.rosejapan;

import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;;

public class HibernateUtil
{
    private static final SessionFactory sessionFactory;

    static
    {
        try
        {
            // Create the SessionFactory from hibernate.cfg.xml
            sessionFactory = new  AnnotationConfiguration().configure().buildSessionFactory();
        } catch(Throwable e)
        {
            System.err.println("Initial sessionFactory creation failed.  " + e);
            throw new ExceptionInInitializerError(e);
        }
    }

    public static SessionFactory getSessionFactory()
    {
        return sessionFactory;
    }
}

Все выглядит хорошо ... Я уже включил log4j-boot.jar в CLASSPATH, но не решил мою проблему.

Ответы [ 2 ]

1 голос
/ 03 марта 2010

java.lang.IllegalAccessError ясно указывает на проблему несовместимости с версией Log4J, которую вы используете (конструктор, как ожидается, не будет), и это неудивительно, потому что (и я не хочу быть здесь грубым) весь ваш управление зависимостями (показано на скриншоте) выглядит как BIG mess:

  • У вас много неверсионных библиотек, поэтому невозможно узнать, что вы используете (в какой версии).
  • Вы, кажется, смешиваете вещи из разных источников (по крайней мере, двух).
  • У вас есть несколько версий одной и той же библиотеки (например, cglib).
  • Вы смешиваете различные версии артефактов slf4j, которые могут быть проблематичными и настоятельно не рекомендуется .

Итак, поскольку вы, очевидно, не используете какое-либо решение для управления зависимостями, я бы посоветовал использовать JAR , поставляемые с дистрибутивом Hibernate (поместите их в чистый каталог) или, по крайней мере, выровнять артефакты slf4j (например, в версии 1.5.10, то есть в версии, используемой аннотациями hibernate 3.4) и для использования log4j-1.2.14.jar. Ваш текущий обходной путь - временное исправление, скрывающее реальную проблему.

1 голос
/ 03 марта 2010

Я решил это, используя только аннотации.

Использовались следующие банки:

alt text

С кодом:

Users.java

package firsthibernateapp;

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

@Entity
@Table(name = "users")
public class Users implements java.io.Serializable
{

    private static final long serialVersionUID = -7960806792183842504L;

    @Id
    private Integer id;
    @Column(name = "name")
    private String  myName;

    public Users()
    {

    }

    public Integer getId()
    {
        return id;
    }

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

    public String getMyName()
    {
        return myName;
    }

    public void setMyName(String myName)
    {
        this.myName = myName;
    }

    @Override
    public boolean equals(Object obj)
    {
        if (obj == null)
        {
            return false;
        }
        if (getClass() != obj.getClass())
        {
            return false;
        }
        final Users other = (Users) obj;
        if (this.id != other.id && (this.id == null || !this.id.equals(obj)))
        {
            return false;
        }
        return true;
    }

    @Override
    public int hashCode()
    {
        int hash = 3;
        hash = 53 * hash + (this.id != null ? this.id.hashCode() : 0);
        return hash;
    }

}

Main.java

package firsthibernateapp;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;

public class Main
{
    public static void main(String[] args)
    {
        SessionFactory sessionFactory = new AnnotationConfiguration()
                .setProperty("hibernate.dialect","org.hibernate.dialect.MySQLDialect")
                .setProperty("hibernate.connection.driver_class","com.mysql.jdbc.Driver")
                .setProperty("hibernate.connection.url","jdbc:mysql://localhost:3306/test_hibernate")
                .setProperty("hibernate.connection.username", "root")
                .setProperty("hibernate.connection.password", "root")
                .setProperty("hibernate.show_sql", "true")
                .setProperty("hibernate.format_sql", "true")
                .setProperty("hibernate.c3p0.acquire_increment", "1")
                .setProperty("hibernate.c3p0.idle_test_period", "100")
                .setProperty("hibernate.c3p0.max_size", "10")
                .setProperty("hibernate.c3p0.max_statements", "0")
                .setProperty("hibernate.c3p0.min_size", "5")
                .setProperty("hibernate.c3p0.timeout", "100")
                .addAnnotatedClass(Users.class)
                .buildSessionFactory();

        Session session = sessionFactory.openSession();
        session.beginTransaction();

        // Get the persistent instance of the given entity class with the given identifier
        // and prints out its member (myName)

        Users user = (Users) session.get(Users.class, 1);
        System.out.println("The user is " + user.getMyName() + "\n");

        // commit the changes, and close

        session.getTransaction().commit();
        session.close();
        sessionFactory.close();
    }
}

Надеюсь, это кому-нибудь пригодится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...