JIT和Hibernate

JIT和Hibernate,hibernate,jit,Hibernate,Jit,确保某段代码不会被JIT消除的最佳方法是什么? 例如,我知道可以通过将我得到的ID传递给一个输出流来完成。我只是想知道有没有更优雅的方法 public User getUser(Long id) throws EntityException { User user = super.get(id); for (UserAnswer userAnswer : user.getUserAnswers()) { userAnswer.getPossibleAnswer()

确保某段代码不会被JIT消除的最佳方法是什么? 例如,我知道可以通过将我得到的ID传递给一个输出流来完成。我只是想知道有没有更优雅的方法

public User getUser(Long id) throws EntityException {
    User user = super.get(id);
    for (UserAnswer userAnswer : user.getUserAnswers()) {
        userAnswer.getPossibleAnswer().getId(); //I DO NOT WANT THIS LINE TO BE REMOVED
    }
    return user;
}
谢谢

其他信息: Hibernate.initialize修复了这个问题。因此,下面的代码可以正常工作。至少它不会像上面的代码那样快速复制

public User getForAlgorithm(Long id) throws EntityException {
    User user = super.get(id);
    for (UserAnswer userAnswer : user.getUserAnswers()) {
        Hibernate.initialize(userAnswer.getPossibleAnswer());
    }
    return user;
}

你想保留电话的副作用吗?如果出现以下情况,JIT会将其删除,这似乎令人惊讶。。。你是否看到代码被JIT删除了?如果是,你是如何确认的?@ɲeuroburɳ,现在这只是最好的猜测。我很高兴知道如何在JVM中看到字节码。我是怎么想出来的很简单。你说得对,这个电话有副作用。调用用于从数据库中拉出关联实体。这对一些电话来说效果很好。这个数字与5-20不同,但之后一个懒散的例外情况出现了。当我调试应用程序时,看起来代码被调用了,但之后仍然有代理而不是相关对象。@ɲeuroburɳ,在我清除应用程序服务器工作目录之前,代码不再工作。由于这种奇怪的行为,我决定在多次调用之后,JIT会消除该调用,因为调用的结果是不使用。正如我之前所说的,这只是最好的猜测。@euroburɳ。我仍然认为如果有副作用,JIT删除它会有点奇怪。有一件事我还不清楚,你有没有尝试过将它写入流的原始想法,但仍然看到相同的LazyLoadingException?另外,如果LazyLoadException是您试图避免的副作用,那么您是否尝试过Hibernate.initialize?