我有一个带有hibernate的Spring Web应用程序。我差不多完成了开发工作,并且正在运行一些压力测试,以了解如果很多用户同时在同一页面上连接会发生什么。
我必须在我的Hibernate配置或/和代码上做错了,因为我收到了这些错误:
formatedMessage : Session is closed!
Message : Session is closed!
Erreur : java.lang.IllegalStateException: EntityManager is closed
stacktrace : java.lang.IllegalStateException: EntityManager is closed
[...]
formatedMessage : EntityManager is closed
Message : EntityManager is closed
SQL Error: 0, SQLState: 55000
Ce statement a été fermé.
Erreur : org.hibernate.exception.GenericJDBCException: could not extract ResultSet
stacktrace : org.hibernate.exception.GenericJDBCException: could not extract ResultSet
[...]
Caused by: org.postgresql.util.PSQLException: Ce statement a été fermé.
以下是代码:
public class Application
{
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "application_seq_gen")
@SequenceGenerator(name = "application_seq_gen", sequenceName = "application_id_seq",initialValue = 1, allocationSize = 1)
private int id;
private String nom;
private Boolean autorise; //Autorise la validation automatique de l'application
private String domaineFonctionnel;
@ElementCollection(fetch=FetchType.EAGER)
@CollectionTable(name="applicationMail")
@Column(name="mail")
private Set<String> listMail;
[...]
}
public ArrayList<Application> getListApplication() {
entityManager = entityManagerFactory.createEntityManager();
Session session = entityManager.unwrap(Session.class);
Criteria criteria = session.createCriteria(Application.class);
criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
ArrayList<Application> listApplication = new ArrayList<Application>();
listApplication.addAll(criteria.list());
entityManager.close();
return listApplication;
}
有人知道这里的问题是什么吗?
答案 0 :(得分:1)
由于连接限制,您的数据库可能连接不足?
如果连接用完,您应该在数据库上允许更多或检查是否关闭所有已完成的连接。 (我看到你控制你的实体经理和会话所以这可能是一个例子)
另外你为什么要使用EntityManagerFactory?你有充分的理由吗?如果没有,请尝试@PersistanceContext它应该解决您的问题。
您只能在Spring管理的类中使用@PersistanceContext。 (仅限弹簧组件)。否则,您需要继续通过EntityManagerFactory获取实体经理