解决Hibernate在多线程应用程序中的错误

时间:2012-05-16 09:59:08

标签: java multithreading hibernate spring-mvc

由于在多线程应用程序(1st clue2nd clue3rd clue等)中尝试使用Hibernate时遇到的所有问题,我想到了另一个解决方案:在经典 Controller中实现逻辑部分,并使用URL.openConnection()从我的线程中调用它。

换句话说,而不是做这样的事情:

MyThread.java

public class MyThread implements Runnable {

    @Override
    public void run() {
        // do some great stuff with Hibernate
    }

}

Anywhere.java

new Thread(new MyThread()).start();

我想尝试类似的东西:

MyController.java

@Controller
public class MyController {

    @RequestMapping(value = "myUrl", method = RequestMethod.GET)
    public void myMethod() {
        // do some great stuff with Hibernate
    }

}

MyThread.java

public class MyThread implements Runnable {

    @Override
    public void run() {
        // simple call the above mapped url
    }

}

Anywhere.java

new Thread(new MyThread()).start();

你怎么看?是好是坏?我还没有尝试过,但我认为这样的解决方案可以防止我们在多线程中使用Hibernate遇到的常见错误,因为服务器将执行逻辑部分,就像有人请求页面一样。

PS:我知道有一些解决方案在多线程应用程序中使用Hibernate,但每次我尝试一个,另一个出现,直到我厌倦了 - with-it 不归路。

PS2:我知道需要保护这样的解决方案(例如UID作为令牌)。

1 个答案:

答案 0 :(得分:4)

我真的没有看到你在这里尝试解决的问题。 Hibernate几乎总是在多线程环境中使用。例如,在webapps中,并发请求由多个并发线程处理,每个线程使用自己的Hibernate会话。这不会导致任何问题。

如果您在线程之间共享相同的会话,或者您在线程之间共享给定的实体,则会遇到问题。

如果你开始自己的线程,并且这个线程使用自己的会话和实体,我不明白为什么你会遇到任何问题。