我正在编写一个简单的项目,一个使用Swing编写的业务应用程序,它使用Hibernate作为后端。我来自Spring,这为我提供了使用hibernate和事务的简便方法。无论如何,我设法让Hibernate工作。昨天,在编写一些代码从数据库中删除bean的同时,我得到了以下信息:
org.hibernate.HibernateException: Illegal attempt to associate a collection with two open sessions
删除代码很简单:
Session sess = HibernateUtil.getSession();
Transaction tx = sess.beginTransaction();
try {
tx.begin();
sess.delete(ims);
} catch (Exception e) {
tx.rollback();
throw e;
}
tx.commit();
sess.flush();
我的HibernateUtil.getSession()
是:
public static Session getSession() throws HibernateException {
Session sess = null;
try {
sess = sessionFactory.getCurrentSession();
} catch (org.hibernate.HibernateException he) {
sess = sessionFactory.openSession();
}
return sess;
}
其他详细信息:仅在关闭应用程序时,我才会在代码中关闭hibernate会话。这是错的吗?为什么我在删除时得到此信息(仅适用于该bean,其他人可以使用),而我不执行其他操作(插入,查询,更新)?
我四处阅读,尝试在中getSession
简单地修改我的方法sessionFactory.getCurrentSessionCall()
,但得到了:org.hibernate.HibernateException: No CurrentSessionContext configured!
Hibernat conf:
<hibernate-configuration>
<session-factory >
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost/joptel</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">******</property>
<property name="hibernate.connection.pool_size">1</property>
<property name="show_sql">true</property>
<property name="hibernate.hbm2ddl.auto">update</property>
..mappings..
</session-factory>
</hibernate-configuration>
我想问你一件事,为什么要尝试使用“ OpenSession”方法?
public static Session getSession() throws HibernateException {
Session sess = null;
try {
sess = sessionFactory.getCurrentSession();
} catch (org.hibernate.HibernateException he) {
sess = sessionFactory.openSession();
}
return sess;
}
您不必调用openSession()
,因为getCurrentSession()
method始终返回当前会话(如果已将其配置为,则返回Thread)。
我明白了!…您必须在hibernate.cfg.xml文件中指定当前上下文
它应该是:
<property name="hibernate.current_session_context_class">thread</property>
问题内容: 我知道静态方法在类级别。因此,我知道我不需要创建实例来调用静态方法。但我也知道我可以将静态方法(如LIKE)称为实例方法。这是我感到困惑的地方,因为我期望从null对象调用静态方法(就像在调用实例方法中一样)。我真的很感谢一些解释,为什么我错了一个期望。 这是示例代码: 问题答案: 通过实例调用静态方法不需要实例存在。只要编译器能够确定变量的类型,它就可以在评估表达式并丢弃结果后静态进
我正在尝试获取href的值,因为我需要在查询字符串中传递一个变量 我必须打开一个弹出窗口,其中“MySecondPage”应该以查询字符串中的值打开,但这个.href返回空值,我不知道为什么它不能工作,就像它在itemtemplate(gridview)中工作一样,我使用了table并用angularJS Repeat。 这是我的弹出功能:
问题内容: public class Category { 在正在生成。 问题答案: 当您执行时,您称呼孩子们的。这里没有问题,只不过您在这里调用了父对象。这将称呼孩子,等等。 不错的无限循环。 摆脱它的最好方法是将您的方法更改为: 这样,您将不打印parentCategory,而仅显示其名称,不显示无限循环,不显示StackOverflowError。 编辑: 正如博洛在下面说的那样,您将需要检
我有一个arraylist,其中添加了以下数字。 然后我使用下面的代码遍历列表并在打印前求和。 它正在打印出一个值6。有人知道发生了什么吗?或者有人能解释我在这里做错了什么吗?感谢您的时间,如果有什么我可以补充澄清的,请不要犹豫。
只是想在回收器中显示我数据库中的信息。一切正常。将显示对象。 但logcat说: 这是我的代码(displayimages.java) 如果有什么不同的话,这是我在MainActivity中写的关于DataBase_Path的内容: 如您所见,我已经为RecycleView附加了一个适配器。那么为什么我总是得到这个错误呢? 我读过与同一问题有关的其他问题,但都没有帮助。
我是新手,但我正在编写一个应用程序,我不断收到这个错误,导致应用程序在启动时崩溃。 导致它的代码在下面的类中,在问题的行旁边会有一个这里的注释。 这就是我调用方法的代码。 这是堆栈跟踪。 谢谢你的帮助。