我不知道你这在哪里出问题了 ,我觉得你这两句
1. getSession().clear();
2. getSession().createCriteria(clazz).list();
应该写反了吧... 换成这样
getSession().createCriteria(clazz).list();
getSession().clear();
后面直接不session关掉.
getSession().close();试试还是不行的话有一种办法就是控制锁,当有用户在操作表时,只有一个用户对他进行操作,其他用户等待...
1. getSession().clear();
2. getSession().createCriteria(clazz).list();
应该写反了吧... 换成这样
getSession().createCriteria(clazz).list();
getSession().clear();
后面直接不session关掉.
getSession().close();试试还是不行的话有一种办法就是控制锁,当有用户在操作表时,只有一个用户对他进行操作,其他用户等待...
解决方案 »
- dozer在美网络的情况下没法使用
- WebService 服务端生成问题
- hibernate问题再求解
- session超时,能不能通过配置转到指定的页面
- jsp中jdbc连接数据库出现的问题
- 请教eclipse3.0.1 + jboss 3.2.3 +Lomboz3 开发EJB的问题
- 关于判断interate中radio被选中的问题。急~~~~~在线等
- j2sdkee的疑惑
- servlet中用session存值后重定向到jsp后无法读到值
- 下载的MyEclipse打不开,求大神指教
- 如何在ejb中访问其他的jar?在哪里配置?
- 客户端测试连接jms就可以,一放到web应用中就出现错误,大家帮我看下
public synchronized void saveDepartment(Department dept1,Department dept2)throws Exception {
Session session = sessionFactory.openSession();
Transaction tx;
try{
System.out.println("保存数据!");
Thread.sleep(5000);
tx = session.beginTransaction();
Criteria criteria = session.createCriteria(Department.class);
List list = criteria.list();
System.out.println("save 前表中记录数量=="+list.size());
session.save(dept1);
Criteria criteria2 = session.createCriteria(Department.class);
List list2 = criteria2.list();
System.out.println("save 后表中记录数量=="+list2.size());
//session.save(dept2);
tx.commit();
}catch(HibernateException msg){
System.out.println("save department is error");
msg.printStackTrace();
}catch(Exception msg){
System.out.println("save department is error");
throw msg;
}finally{
if(session!=null){
session.close();
}
System.out.println("保存完成数据!");
}
}
public synchronized void getAll()throws Exception {
Session session = sessionFactory.openSession();
Transaction tx;
try{
System.out.println("读取数据!");
Thread.sleep(5000);
tx = session.beginTransaction();
Criteria criteria = session.createCriteria(Department.class);
List list = criteria.list();
System.out.println("表中记录数量=="+list.size());
tx.commit();
}catch(HibernateException msg){
System.out.println("save department is error");
msg.printStackTrace();
}catch(Exception msg){
System.out.println("save department is error");
throw msg;
}finally{
if(session!=null){
session.close();
}
System.out.println("读取完成!");
}
}
public class Test implements Runnable{
BasicEmpService emp = new EmployeeService();
public static boolean b = true;
public static void main(String[] args){ try{
Test t = new Test();
Thread t1 = new Thread(t);
t1.start();
Thread.sleep(100);
b = false;
Thread t2 = new Thread(t);
t2.start();
}catch(Exception msg){
msg.printStackTrace();
}
}
public void run(){
if(b){
int num = 0;
while(num<10){
try{
emp.getAll();
num++;
}catch(Exception msg){ }
}
}else{
int num = 0;
Department d1 = new Department();
d1.setName("Coding");
while(num<10){
try{
emp.saveDepartment(d1, d1);
num++;
}catch(Exception msg){
}
}
}
}
}
例:<property name="connection.isolation">2</property>
如果 "2" 不行的话,换成 "8" 试试
如果 webapp2 中的事务是在 webapp1 的插入之前开始的, webapp2 的这个事务查询不到webapp1 刚刚插入的那条记录,即使 webapp1 事务已提交.
getSession().createCriteria(clazz).list();
没有放到事务里。
不过我有点不明白
list仅仅是个查询,问什么还有放到事务里去处理呢?