@fife

Где создать sessionFactory в Spring проекте?

Добрый вечер, только начинаю работу с hibernate, до этого работал с spring data.

Задача: Нужно создать таблицу Note используя hibernate JPA mapping

В обычном hibernate проекте можно просто написать

public class Main {
    public static void main(String[] args) {
        SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
    }
}


И тогда в бд появится новая таблица.

Немного туплю, как это сделать в Spring проекте где нету main`a, чтобы также при запуске проекта, создавалась таблица в бд?

Сущность для которой нужно создать таблицу.

import javax.persistence.*;
import java.util.Date;

@Entity
@Table(name = "notes")
public class Note {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String title;

    private String text;

    private Date date;

    public Note() {
    }

    public Note(Long id) {
        this.id = id;
    }

    public Long getId() {
        return id;
    }

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

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getText() {
        return text;
    }

    public void setText(String text) {
        this.text = text;
    }

    public Date getDate() {
        return date;
    }

    public void setDate(Date date) {
        this.date = date;
    }
}

hibernateUtil
public class  HibernateUtil {
    private static SessionFactory sessionFactory = null;

    static {
        Configuration cfg = new Configuration().configure();
        StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder()
                .applySettings(cfg.getProperties());

        sessionFactory = cfg.buildSessionFactory(builder.build());
    }

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


hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE hibernate-configuration SYSTEM "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name = "connection.driver_class">org.postgresql.Driver</property>
        <property name = "connection.url">jdbc:postgresql://localhost:5432/note</property>
        <property name = "connection.username">postgres</property>
        <property name = "connection.password">admin</property>
        <property name = "show_sql">true</property>
        <property name = "hibernate.hbm2ddl.auto">update</property>

        <mapping class="com.notes.entity.Note" />
    </session-factory>
</hibernate-configuration>
  • Вопрос задан
  • 789 просмотров
Решения вопроса 1
azerphoenix
@azerphoenix Куратор тега Java
Java Software Engineer
Добрый день.
В чем именно заключается проблема?
Судя по всему у вас есть hibernate.cfg.xml, а также есть HibernateUtil.
Можно чуть подправить этот класс на такой вариант:
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;

public class HibernateUtil {

  final static StandardServiceRegistry registry = new StandardServiceRegistryBuilder()
      .configure()
      .build();

  private static final SessionFactory sessionFactory;

  static {
    try {
      sessionFactory = new MetadataSources(registry).buildMetadata()
          .buildSessionFactory();
    } catch (Throwable ex) {
      throw new ExceptionInInitializerError(ex);
    }
  }

  public static Session getSession()
      throws HibernateException {
    Session session = null;
    try {
      session = sessionFactory.getCurrentSession();
    } catch (org.hibernate.HibernateException he) {
      session = sessionFactory.openSession();
    }
    return session;
  }

}


Далее используя метод getSession() получаете сессию и делаете то, что нужно.
Например,

Session session = HibernateUtil.getSession();
      session.beginTransaction();
      note.setTitle("Example");
      session.merge(note);
      session.getTransaction().commit();
      session.close();


как это сделать в Spring проекте где нету main`a

Почему это в Spring проекте нет main метода?
Вот, туториал по Spring Framework, где указан main метод - https://www.youtube.com/watch?v=nLCYk1ySY_U
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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