Java Hibernate-第二个查询提供请求的未知服务
我正试图更好地理解Hibernate是如何工作的 我有个无法解决的问题 当应用程序启动时,它进行查询Java Hibernate-第二个查询提供请求的未知服务,java,hibernate,session,hibernate-session,Java,Hibernate,Session,Hibernate Session,我正试图更好地理解Hibernate是如何工作的 我有个无法解决的问题 当应用程序启动时,它进行查询 Session session = HibernateUtil.getSessionFactory().getCurrentSession(); session.beginTransaction(); int result; String query = "SELECT count(*) as posti_disponibili from occupazione t inner join ";
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
int result;
String query = "SELECT count(*) as posti_disponibili from occupazione t inner join ";
query += "(select id_posto_park, max(date_time) as MaxDate from occupazione group by id_posto_park) tm on ";
query += "t.id_posto_park = tm.id_posto_park and t.date_time = tm.Maxdate and t.isOccupied = 0";
BigInteger bi = (BigInteger) session.createSQLQuery(query).uniqueResult();
result = bi.intValue();
HibernateUtil.shutdown();
最后,我关闭当前会话
之后,我还有第二个问题要完成:
我打开一个新会话(第一个会话是用方法HibernateUtil.shutdown();
关闭的)
我不明白为什么,我关闭了第一个会议,但又打开了一个新的会议
关闭每个查询的会话是否正确
编辑
我试图解决这个问题,但没有结果
现在我有了第一个select查询,它进行得很顺利。这是在应用程序启动时
try {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
String query = "SELECT count(*) as posti_disponibili from occupazione t inner join ";
query += "(select id_posto_park, max(date_time) as MaxDate from occupazione group by id_posto_park) tm on ";
query += "t.id_posto_park = tm.id_posto_park and t.date_time = tm.Maxdate and t.isOccupied = 0";
BigInteger bi = (BigInteger) session.createSQLQuery(query).uniqueResult();
result = bi.intValue();
}
我不承诺或冲掉它。
然后,在应用程序上,我有第二个查询,所以我获取currentsession并尝试执行select
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
Client client = new Client();
client.setIdClient(clientId);
String queryString ="from it.besmart.models.Client c where c.clientId = :c";
logger.debug(queryString);
// logger.debug(session);
Query theQuery = session.createQuery(queryString).setProperties(client);
List<?> list = theQuery.list();
会话会话=HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
客户端=新客户端();
client.setIdClient(clientId);
String queryString=“from.besmart.models.Client c,其中c.clientId=:c”;
logger.debug(queryString);
//调试(会话);
Query theQuery=session.createQuery(queryString).setProperties(客户端);
List=theQuery.List();
应用程序停止,没有任何结果,我也不知道发生了什么,因为我无法将hibernate设置为使用pi4j登录。。。
我使用hibernate会话的方式有问题吗?如果使用
sessionFactory.getCurrentSession()
,您将获得一个绑定到事务生命周期的“当前会话”,该会话将在事务结束时自动刷新和关闭(提交或回滚)
如果您决定使用sessionFactory.openSession()
,则必须自己管理会话,并“手动”刷新和关闭会话
有关更多信息,请转到。在第一种情况下,您可以调用
getCurrentSession()
,在第二种情况下,您可以调用openSession()
。这是您想要的吗?我第一次调用getCurrentSession,查询就开始了。然后我关闭会话(正确吗?),为了进行新的查询,我必须调用openSession?对吗?为什么我会有例外?谢谢@Abdelhak我读了文档,但我一点也不懂。您说过事务在刷新或提交后关闭。我只是选择查询,所以不需要提交。这是否意味着我必须始终使用相同的会话,即使对于以下查询也是如此?
try {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
String query = "SELECT count(*) as posti_disponibili from occupazione t inner join ";
query += "(select id_posto_park, max(date_time) as MaxDate from occupazione group by id_posto_park) tm on ";
query += "t.id_posto_park = tm.id_posto_park and t.date_time = tm.Maxdate and t.isOccupied = 0";
BigInteger bi = (BigInteger) session.createSQLQuery(query).uniqueResult();
result = bi.intValue();
}
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
Client client = new Client();
client.setIdClient(clientId);
String queryString ="from it.besmart.models.Client c where c.clientId = :c";
logger.debug(queryString);
// logger.debug(session);
Query theQuery = session.createQuery(queryString).setProperties(client);
List<?> list = theQuery.list();