Hi,
ich bin neu sowohl in Hibernate als auch in Java, aber ich komme ganz gut klar, glaube ich :) Ich komme von PHP und da läuft der Hause in vielerlei Hinsicht anders, daher tue ich mich etwas schwer..
Ich habe eine Frage (Nicht schlagen - Es ist mein erstes Mal ;)):
Ich habe eine Webapp, die auf Tomcat läuft und hole mir immer mit dieser Konstruktion eine Session pro Thread:
Code:
public class HibernateUtil
{
public static Date date = new Date();
private static ThreadLocal<Session> session = new ThreadLocal<Session>();
/**
*
* @return {@link Session}
*/
public static Session get()
{
//System.out.println(Thread.currentThread().getName() + " - Ist session = null: " + (session.get() == null));
//System.out.println(Thread.currentThread().getName() + " - Ist session offen: " + (session.get() != null ? session.get().isOpen() : false));
if (session.get() == null || !session.get().isOpen()) {
session.set(new Configuration().configure().buildSessionFactory().openSession());
}
return (Session)((session.get()));
}
public static Session getNewSession()
{
return new Configuration().configure().buildSessionFactory().openSession();
}
public static void close()
{
Session session = HibernateUtil.get();
session.flush();
session.close();
}
public static boolean isOpen()
{
return session.get() != null ? session.get().isOpen() : false;
}
public static int getIdentifier()
{
return HibernateUtil.get().hashCode();
}
}
Ich hoffe, das ist erst mal richtig (Wie gesagt, es ist schwierig, von PHP auf Java umzudenken).
Allerdings wird jetzt bei jedem Seitenaufruf ein Rattenschwanz an SQL-Requests ausgeführt:
Code:
194 Init DB _test
194 Query SELECT 1
194 Query SET NAMES utf8
194 Query SET character_set_results = NULL
194 Query select round('inf'), round('-inf'), round('nan')
194 Query SHOW VARIABLES
194 Query SHOW COLLATION
194 Query SET autocommit=1
194 Query SET autocommit=0
194 Query commit
194 Query SET autocommit=1
194 Query SHOW TABLES FROM `_test` LIKE 'mt_attribute'
194 Query SHOW TABLES FROM `_test` LIKE 'mt_attribute'
194 Query SHOW COLUMNS FROM `mt_attribute` FROM `_test` LIKE '%'
194 Query SHOW CREATE TABLE `_test`.`mt_attribute`
194 Query SHOW INDEX FROM `mt_attribute` FROM `_test`
194 Query SHOW TABLES FROM `_test` LIKE 'mt_attribute_option'
194 Query SHOW TABLES FROM `_test` LIKE 'mt_attribute_option'
194 Query SHOW COLUMNS FROM `mt_attribute_option` FROM `_test` LIKE '%'
194 Query SHOW CREATE TABLE `_test`.`mt_attribute_option`
194 Query SHOW INDEX FROM `mt_attribute_option` FROM `_test`
194 Query SHOW TABLES FROM `_test` LIKE 'mt_look'
194 Query SHOW TABLES FROM `_test` LIKE 'mt_look'
194 Query SHOW COLUMNS FROM `mt_look` FROM `_test` LIKE '%'
194 Query SHOW CREATE TABLE `_test`.`mt_look`
194 Query SHOW INDEX FROM `mt_look` FROM `_test`
194 Query SHOW TABLES FROM `_test` LIKE 'mt_look_product'
194 Query SHOW TABLES FROM `_test` LIKE 'mt_look_product'
194 Query SHOW COLUMNS FROM `mt_look_product` FROM `_test` LIKE '%'
194 Query SHOW CREATE TABLE `_test`.`mt_look_product`
194 Query SHOW INDEX FROM `mt_look_product` FROM `_test`
194 Query SHOW TABLES FROM `_test` LIKE 'mt_user'
194 Query SHOW TABLES FROM `_test` LIKE 'mt_user'
194 Query SHOW COLUMNS FROM `mt_user` FROM `_test` LIKE '%'
194 Query SHOW CREATE TABLE `_test`.`mt_user`
194 Query SHOW INDEX FROM `mt_user` FROM `_test`
194 Query SET autocommit=0
Lässt sich das nicht vermeiden? Zur Info: Ich arbeite mit den Annotations.
Danke schon mal, falls mir wer hilft.