Available in versions: Dev (3.21) | Latest (3.20) | 3.19 | 3.18 | 3.17 | 3.16 | 3.15 | 3.14 | 3.13 | 3.12 | 3.11

可序列化性

适用于 ✅ 开源版   ✅ 专业版   ✅ 企业版

为了方便起见,许多 jOOQ 类型扩展并实现了 java.io.Serializable 接口。但是请注意,jOOQ 不会对序列化格式及其向后兼容的演变做出任何保证。这意味着,虽然当两个使用完全相同的 jOOQ 版本的进程通过网络传输 jOOQ 状态时,通常可以安全地依赖 jOOQ 类型的可序列化性,但依赖于持久化序列化的 jOOQ 状态以便稍后再次反序列化是不安全的 - 即使在补丁版本升级之后

与 Java 序列化一样,如果您想要可靠的 Java 对象序列化,请使用您自己的序列化协议,或使用 官方导出格式之一。

哪些类型是可序列化的?

任何 jOOQ 对象中唯一瞬态的、不可序列化的元素是 Configuration 的底层 java.sql.Connection。当您想在反序列化后执行查询,或者当您想存储/刷新/删除 Updatable Records 时,您可能需要将它们“重新连接”到 Configuration

// Deserialise a SELECT statement
ObjectInputStream in = new ObjectInputStream(...);
Select<?> select = (Select<?>) in.readObject();

// This will throw a DetachedException:
select.execute();

// In order to execute the above select, attach it first
DSLContext create = DSL.using(connection, SQLDialect.ORACLE);
create.attach(select);

自动附加 QueryParts

自动附加 QueryParts 的另一种方法,或者说是随意为它们提供新的 java.sql.Connection 的方法,是挂钩到 Execute Listener 支持。有关这方面的更多详细信息,请参见手册中关于 ExecuteListeners 的章节

反馈

您对此页面有任何反馈吗? 我们很乐意听取您的意见!

The jOOQ Logo