Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java HibernateCursorItemReader获取对会话错误的非线程安全访问 @组件 @范围(“步骤”) 公共类MyReader实现ItemReader、InitializingBean{ 私有HibernateCursorItemReader; @自动连线 私人会话工厂会话工厂; @凌驾 public void afterPropertieSet()引发异常{ reader=新的HibernateCursorItemReader(); reader.setSessionFactory(会话工厂); reader.setUseStatelessSession(true); reader.setQueryString(/*query*/); //... } public MyDto read()引发异常{ Object[]record=reader.read();//此处的异常org.hibernate.AssertionFailure:可能对会话进行非线程安全访问 } }_Java_Multithreading_Hibernate_Spring Batch - Fatal编程技术网

Java HibernateCursorItemReader获取对会话错误的非线程安全访问 @组件 @范围(“步骤”) 公共类MyReader实现ItemReader、InitializingBean{ 私有HibernateCursorItemReader; @自动连线 私人会话工厂会话工厂; @凌驾 public void afterPropertieSet()引发异常{ reader=新的HibernateCursorItemReader(); reader.setSessionFactory(会话工厂); reader.setUseStatelessSession(true); reader.setQueryString(/*query*/); //... } public MyDto read()引发异常{ Object[]record=reader.read();//此处的异常org.hibernate.AssertionFailure:可能对会话进行非线程安全访问 } }

Java HibernateCursorItemReader获取对会话错误的非线程安全访问 @组件 @范围(“步骤”) 公共类MyReader实现ItemReader、InitializingBean{ 私有HibernateCursorItemReader; @自动连线 私人会话工厂会话工厂; @凌驾 public void afterPropertieSet()引发异常{ reader=新的HibernateCursorItemReader(); reader.setSessionFactory(会话工厂); reader.setUseStatelessSession(true); reader.setQueryString(/*query*/); //... } public MyDto read()引发异常{ Object[]record=reader.read();//此处的异常org.hibernate.AssertionFailure:可能对会话进行非线程安全访问 } },java,multithreading,hibernate,spring-batch,Java,Multithreading,Hibernate,Spring Batch,当使用HibernateCursorItemReader时,我得到了org.hibernate.AssertionFailure:对会话的可能非线程安全访问异常 如何修复它 我需要它来运行read()。写入程序也有自己的db调用来获取其他详细信息。,HibernateCursorItemReader是非线程安全的。问题不在于你发布的类,而在于你使用它的方式。可能您正在多线程步骤中使用它,但您不能。除了使用单线程步骤(显而易见),还可以使用安全的多线程解决方案 另请参见,HibernateCurs

当使用
HibernateCursorItemReader
时,我得到了
org.hibernate.AssertionFailure:对会话的可能非线程安全访问
异常

如何修复它

我需要它来运行
read()。写入程序也有自己的db调用来获取其他详细信息。

HibernateCursorItemReader
非线程安全的。问题不在于你发布的类,而在于你使用它的方式。可能您正在多线程步骤中使用它,但您不能。除了使用单线程步骤(显而易见),还可以使用安全的多线程解决方案

另请参见

HibernateCursorItemReader
不是线程安全的。问题不在于你发布的类,而在于你使用它的方式。可能您正在多线程步骤中使用它,但您不能。除了使用单线程步骤(显而易见),还可以使用安全的多线程解决方案


在调用
read
之前,请参见
hibernatecursorsoritemreader
上的
MyReader
不调用
open
。这可能会在未初始化状态下开始使用
HibernateCursorItemReader
,这可能是问题的原因。为什么不直接使用
HibernateCursorItemReader
?读卡器的附加值是什么?在调用
read
之前,您的
MyReader
不会在
HibernateCursorItemReader
上调用
open
。这可能会在未初始化状态下开始使用
HibernateCursorItemReader
,这可能是问题的原因。为什么不直接使用
HibernateCursorItemReader
?读者的附加值是什么?@theAnonymous,有什么反馈吗?你解决问题了吗?@theAnonymous,有什么反馈吗?你解决问题了吗?
@Component
@Scope("step")
public class MyReader implements ItemReader<MyDto>, InitializingBean{
    private HibernateCursorItemReader<Object[]> reader;
    @Autowired
    private SessionFactory sessionFactory;

    @Override
    public void afterPropertiesSet() throws Exception{
        reader = new HibernateCursorItemReader<>();
        reader.setSessionFactory(sessionFactory);
        reader.setUseStatelessSession(true);
        reader.setQueryString(/*query*/);
        //...
    }

    public MyDto read() throws Exception{
        Object[] record = reader.read(); //exception here org.hibernate.AssertionFailure: possible non-threadsafe access to the session
    }
}