我正在使用 Hibernate 构建我的第一个 Java 应用程序,并且在使用 Hibernate 会话时遇到了一些问题。
我的问题:当第二个用户登录到应用程序时,他会覆盖第一个用户的会话 -> 现在两者都在处理第二个会话。尽管两个用户在登录时都创建了一个新的会话。
我的代码:
首先我在用户登录时获取当前用户(LoginDetail.java):
userBean = UserProxy.getInstance().getElementByUser(userBean.getUser(), userBean.getPassword());
用户代理.java:
public static synchronized UserProxy getInstance() {
if (instance == null) {
instance = new UserProxy();
}
return instance;
}
public UserBean getElementByUser(String user, String password) {
try {
Iterator<SUsers> iter = s.createQuery("from SUsers where user = '" + user + "' and password = '" + password + "'").list().iterator();
while (iter.hasNext()) {
userDB = iter.next();
currentUser = convertClassToBean(userDB);
log.debug("aktuell ausgewaehlter char: " + userDB.getId());
}
} catch (Exception e) {
log.error(e);
e.printStackTrace();
}
currentUser = convertClassToBean(userDB);
return currentUser;
}
我的 HibernateUtil.java:
public static final ThreadLocal<Session> session = new ThreadLocal<Session>();
public static Session currentSession() {
Session s = session.get();
// Open a new Session, if this Thread has none yet
if (s == null) {
s = sessionFactory.openSession();
session.set(s);
}
return s;
}
和hibernate.cfg.xml:
<property name="connection.pool_size">1</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="current_session_context_class">thread</property>
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
<property name="show_sql">true</property>
<property name="hbm2ddl.auto">update</property>
<property name="hibernate.connection.isolation">2</property>
谁能给我一个提示如何解决这个问题?