我有一个用例,其中我要序列化Cassandra BoundStatement并将其转换为byte[]
数组,并通过网络发送并将其反序列化回Bound Statement
对象。
我正在使用Java 8。
但是问题是BoundStatement没有实现Serializable
接口。
有什么方法可以序列化BoundStatement,通过HTTP发送并将其反序列化回BoundStatement
最佳答案
如果要序列化BoundStatement
,则还必须序列化PreparedStatement
,DataWrapper
,因为BoundStatement
会同时使用它们。
即使可以序列化BoundStatement
,也不能在没有创建它的会话的情况下执行它。如果在其他会话中执行BoundStatement
,驱动程序将抛出InvalidQueryException
Exception in thread "main" com.datastax.driver.core.exceptions.InvalidQueryException: Tried to execute unknown prepared query : 0x0c245df8681f7dc939aba0c76164e4d3. You may have used a PreparedStatement that was created with another Cluster instance.
at com.datastax.driver.core.SessionManager.makeRequestMessage(SessionManager.java:571)
at com.datastax.driver.core.SessionManager.executeAsync(SessionManager.java:131)
at com.datastax.driver.core.AbstractSession.execute(AbstractSession.java:68)
...