【发布时间】:2011-07-22 01:23:50
【问题描述】:
谁能说说我的申请有什么问题?
public class HibernateUtil {
private static final SessionFactory sessionFactory;
static {
try {
sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
} catch (Throwable ex) {
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}
public boolean insertUser(User user) {
Session session = HibernateUtil.getSessionFactory().openSession();
try {
session.beginTransaction();
session.save(user);
session.getTransaction().commit();
} catch (HibernateException he) {
session.getTransaction().rollback();
return false;
}finally{
if (session != null){
session.close();
}
}
return true;
}
这是我在数据库中插入用户时调用的唯一方法,然后如果我尝试插入另一个用户,则启动此异常:
Initial SessionFactory creation failed.java.lang.OutOfMemoryError: PermGen space
更新: 我不知道 hibernate.cfg 中是否有什么东西,但它就在这里:
<?xml version="1.0" encoding="UTF-8"?>
org.hibernate.dialect.MySQL方言 com.mysql.jdbc.Driver jdbc:mysql://localhost:3306/XXXXX XXXX XXXXc 线程
<!-- Connection pool C3P0 -->
<property name="hibernate.c3p0.acquire_increment">2</property>
<property name="hibernate.c3p0.min_size">5</property>
<property name="hibernate.c3p0.max_size">100</property>
<property name="hibernate.c3p0.timeout">20</property>
<property name="hibernate.c3p0.max_statements">50</property>
<property name="hibernate.c3p0.idle_test_period">60</property>
<!-- To show sql output on the screen -->
<property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql">true</property>
<!-- Mapping the tables in my schema -->
...
</session-factory>
为什么会发生这种情况以及如何解决?
最好的问候, 瓦尔特·恩里克。
【问题讨论】:
-
“尝试插入另一个”是什么意思?如果在同一个 JVM 中执行,为什么还要再次执行静态初始化程序?
-
@axtavt 当我尝试在我的数据库中插入另一个用户时,我的意思是。
-
@Valter:你是从 NetBeans 开始的,对吧?您是否尝试过创建
war文件并将其部署到单独安装的Tomcat 中? -
@axtavt 我没有尝试过,因为 netbenas 与 tomcat 集成,这意味着效率更高,我的意思是,我的代码和 netbeans 动态部署。但是您认为 Netbeans 在部署方面做错了吗?我也看到有些人在谈论日食。我认为这是 tomcat 中的一些问题.. 但这对我来说似乎很奇怪,因为这是一个给出这种异常的简短应用程序。
-
@Valter:根据您的描述,
HibernateUtil的静态初始化程序似乎被调用了两次。如果是这样,它可能是由一些与类加载器相关的魔法引起的,例如,用于热重新部署。所以,我认为你需要在没有 IDE 的干净 Tomcat 上尝试一下。
标签: java hibernate exception out-of-memory