powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate и sql insert
9 сообщений из 9, страница 1 из 1
Hibernate и sql insert
    #38030191
Don VinNi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день всем. Начал недавно юзать hibernate в web приложение. Но умя возникла такая проблема, если через обычный запрос sql сделать insert в таблицу. То пока я не остановлю приложение и заново не запущу, то мою запись невидно в приложение.
Вот что умя есть:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
public class HibernateUtil {

    private static final SessionFactory sessionFactory;

    static {
        try{
            sessionFactory=new Configuration().configure().buildSessionFactory();
        }catch (Throwable ex){
            System.err.println("Initial SessionFactory creation failed." + ex);
            throw new ExceptionInInitializerError(ex);
        }
    }

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


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
public List<T> findAll() {
        Session session=null;
        List<T> listFind=null;
        try{
            session=HibernateUtil.getSessionFactory().openSession();
            Criteria criteria=session.createCriteria(entityClass);
            listFind=criteria.list();
        }catch (Exception e){
            System.out.println(e.getStackTrace());
        }finally {
            if(session!=null&&session.isOpen())
                session.close();
        }
        return  listFind;
    }
}



конфигурационный файл:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
<session-factory>
    <!-- Database connection settings -->
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/bla</property>
    <property name="hibernate.connection.username">bla</property>
    <property name="hibernate.connection.password">bla</property>
    <!-- SQL dialect -->
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    <!-- Drop and re-create the database schema on startup -->
    <property name="hibernate.hbm2ddl.auto">update</property>
      
    <!--<property name="hi"-->
     <!--JDBC connection pool (use the built-in)-->
    <property name="hibernate.c3p0.max_size">15</property>
    <property name="hibernate.c3p0.min_size">5</property>
    <property name="hibernate.c3p0.max_statements">50</property>
    <property name="hibernate.c3p0.timeout">150</property>
    <!-- Echo all executed SQL to stdout -->
    <property name="hibernate.show_sql">true</property>
    
 
    <mapping class="bla.bla.bla.model.User"/>


  </session-factory>
...
Рейтинг: 0 / 0
Hibernate и sql insert
    #38030225
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обычного так себя ведёт кеш второго уровня.
http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/performance.html#performance-cache
После первого запроса, тот же запрос уже не создаёт SQL, а читает данные из кэша.
Если у вас третья сторона пишет в базу, то кеш нужно отключать, либо настраивать чтобы он вовремя инвалидировался.
Если у вас нужны SQL в запросы в том же сервере, то нужно их запускать через Hibernate API
http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/querysql.html#querysql-cud
Тогда хибер сам разберется с обновлением кэша.
...
Рейтинг: 0 / 0
Hibernate и sql insert
    #38030658
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://docs.jboss.org/hibernate/orm/4.1/quickstart/en-US/html_single/

Код: java
1.
2.
3.
session.beginTransaction();
list = ...
session.getTransaction().commit();
...
Рейтинг: 0 / 0
Hibernate и sql insert
    #38031548
Don VinNi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за ответ. Как я в начале говорил hibernate начел юзать недавно, и тут возникает еще один вопрос. В мануале я наткнулся на то что hibernate можно сконфигить и через hibernate.cfg.xml и persistence.xml. Можете мне подсказать что лучше юзат? или если нету разницы то нафига нуна persistence.xml? ))
...
Рейтинг: 0 / 0
Hibernate и sql insert
    #38031560
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hibernate независимое популярное решение. JEE это Java спецификации. Раньше они никак небыли связаны. Но hibernate на столько хорош, что его надо было добавить. Сделали JPA спецификацию. Это часть JEE, но абстрагированая от конкретных ORM.
Можно использовать hibernate через его собственный API, а можно через JPA API.
Это, кстати, ещё не все способы сконфигурировать хибер.
...
Рейтинг: 0 / 0
Hibernate и sql insert
    #38031565
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
persistence.xml это JPA.
...
Рейтинг: 0 / 0
Hibernate и sql insert
    #38031646
Don VinNi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowiczhibernate независимое популярное решение. JEE это Java спецификации. Раньше они никак небыли связаны. Но hibernate на столько хорош, что его надо было добавить. Сделали JPA спецификацию. Это часть JEE, но абстрагированая от конкретных ORM.
Можно использовать hibernate через его собственный API, а можно через JPA API.
Это, кстати, ещё не все способы сконфигурировать хибер.

ну значит если я используе Session вместо EntityManager это нормально? и потом насчет cache второго уровня в мануале говорится что автор...you can override this by setting the shared-cache-mode element in your persistence.xml file ..., куда мне этот проперти пропехнуть в hibernate.cfg.xml? и кстати насчет другого способо конфига, где могу найти дефолтный hibernate.properties файл?
...
Рейтинг: 0 / 0
Hibernate и sql insert
    #38031805
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Don VinNiBlazkowiczhibernate независимое популярное решение. JEE это Java спецификации. Раньше они никак небыли связаны. Но hibernate на столько хорош, что его надо было добавить. Сделали JPA спецификацию. Это часть JEE, но абстрагированая от конкретных ORM.
Можно использовать hibernate через его собственный API, а можно через JPA API.
Это, кстати, ещё не все способы сконфигурировать хибер.

ну значит если я используе Session вместо EntityManager это нормально? и потом насчет cache второго уровня в мануале говорится что автор...you can override this by setting the shared-cache-mode element in your persistence.xml file ..., куда мне этот проперти пропехнуть в hibernate.cfg.xml? и кстати насчет другого способо конфига, где могу найти дефолтный hibernate.properties файл?в ссылке ж на квикстарт всё написано
а подробнее в
http://docs.jboss.org/hibernate/orm/4.1/manual/en-US/html_single/ и
http://docs.jboss.org/hibernate/orm/4.1/devguide/en-US/html_single/
...
Рейтинг: 0 / 0
Hibernate и sql insert
    #38031953
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Don VinNiну значит если я используе Session вместо EntityManager это нормально? и потом насчет cache второго уровня в мануале говорится что
- если HibernateUtil написан правильно, то после строки - "Коммит прошёл. Всё" - все увидят изменения.

AFAIK второй уровень выключен по умолчанию и это правильно.



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
package main;

import org.hibernate.Session;

import dao.Autor;
import dao.Book;
import dao.HibernateUtil;

public class Main {
	public static void main(String[] args) {
		System.out.println("Start Main V");
		HibernateUtil.recreateDatabase(); // ПЕРЕСОЗДАЁТ ТАБЛИЧКИ В БД !!!

		Session session = HibernateUtil.beginTransaction(); // автостарт сессии -
																												// current_session_context_class
		try {
			System.out.println("Создать класс-запись в БД");
			Book b = new Book();
			b.setName("ВойнаИмир");
			Autor a = new Autor();
			a.setName("Иванов");
			b.addAutor(a);
			session.saveOrUpdate(b);
			// session.update(a);
			// session.flush();
			System.out.println("Сохранили в БД класс без коммита");
		} finally {
			HibernateUtil.commitTransaction();
			System.out.println("Коммит прошёл. Всё");
		}
	}
}

package dao;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;

public class HibernateUtil {
	//конфиг-файл лежит в папке bin - hibernate.cfg.xml
	private static SessionFactory factory;

	public static Configuration getInitializedConfiguration() {
		AnnotationConfiguration config = new AnnotationConfiguration();
		/* add all of your JPA annotated classes here!!! */
		config.addAnnotatedClass(Customer.class);
		config.addAnnotatedClass(ObjList.class);
		config.configure();
		return config;
	}

	public static Session getSession() {
		if (factory == null) {
			Configuration config = HibernateUtil.getInitializedConfiguration();
			factory = config.buildSessionFactory();
		}
		Session hibernateSession = factory.getCurrentSession();
		return hibernateSession;
	}

	public static void closeSession() {
		HibernateUtil.getSession().close();
	}

	public static void recreateDatabase() {
		Configuration config;
		config = HibernateUtil.getInitializedConfiguration();
		new SchemaExport(config).create(true, true);
	}

	public static Session beginTransaction() {
		Session hibernateSession;
		hibernateSession = HibernateUtil.getSession();
		hibernateSession.beginTransaction();
		return hibernateSession;
	}

	public static void commitTransaction() {
		HibernateUtil.getSession().getTransaction().commit();
	}

	public static void rollbackTransaction() {
		HibernateUtil.getSession().getTransaction().rollback();
	}

	public static void main(String args[]) {
		HibernateUtil.recreateDatabase();
	}

}
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate и sql insert
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]