概念
通过将多个对象序列化到一个大对象(LOB)中来保存一个对象图,并存储在一个数据库字段中。
对象模型经常出现一些小对象组成的复杂图,复杂性主要体现在对象间的关系上,比如组织结构层次关系。
对数据库的映射比较复杂,最简单的方法是包含一个指向上级的外键,但这样做很难使用。
序列化LOB方法使整张的对象图被作为一个独立的大对象写入表中,变成了一种备忘录的形式。
运行机制
- 两种方法进行序列化:二进制形式(BOLB)或者文本字符形式(CLOB)。
- BLOB的优点:易于编程,使用空间小。缺点:数据库必须支持二进制数据类型,若没有对象就无法重新构造对象图,即需要还原才能查看字段内容。
- CLOB优点:容易查看内容。缺点:占用空间多,需要自己的解析器,并且速度慢
- XML可以作为CLOB的解析器,空间问题可以通过压缩的XML格式解决,但同时也失去了可读性。
- 注意ID问题,若LOB放错了位置,譬如把顾客LOB放到订单中,顾客数据就会被拷贝到每一个订单上,使更新成为问题。
- 注意数据的复制,往往复制的数据不是一个完整的序列化LOB。
使用时机
- 在能够突出对象模型的一部分、并且用它作为LOB的时候使用。这些对象一般不会在应用程序之外通过SQL访问。
- LOB之外的对象引用隐藏在LOB里面的对象,序列化LOB效率会低下,需要一些引用方案,但会十分复杂。
序列化LOB示例-序列化一个部分层级到XML中(java)
Step1 :根据对象结构建立客户和部门类
Step1 :插入一个LOB(读取XML的过程和插入相反,略)