Object DataBase--db4o之旅(2)
来源:互联网 发布:淘宝店铺信誉怎么看 编辑:程序博客网 时间:2024/04/28 02:41
4.Structed Object
如果一个对象中不仅仅有常见的java类型还包含其他的对象,那么在modify 被包含的对象的时候,就会出现一个问题。如果我更新了这些被包含的对象,那么在update delete 的时候,他们会不会被操作到?db4o中 提供了一个 depth的概念。所有object 的默认的update depth为1,这就意味着该object 中的primitive 和 string members 能被update,其他类型的对象将不被upda
te。 同样对应delete 如果想实现 对象中的递归删除, 那同样需要利用db4o中的 delete depth
这是update depth:
[updatePilotSeparateSessionsImprovedPart1]
Db4o.configure().objectClass("com.db4o.f1.chapter2.Car")
.cascadeOnUpdate(true);
这是delete depth:
[deleteDeepPart1]
Db4o.configure().objectClass("com.db4o.f1.chapter2.Car")
.cascadeOnDelete(true);
Again: Note that all configuration must take place before the ObjectContainer is opened.
其实这里还没有结束,对于delete 会出现这么一个问题,当我通过 delet depth 将一个instance 删除了,他里面包含的某个其他类型的object instance 也被删除了,但是这个
对象还在被其他对象引用,那这个问题怎么办? 现在db4o 还没有解决方法。我们现在只能
小心操作delete。
5. Transactions
对应数据库来说,transaction 是必须的,下面我们来看看object dataBase--db4o是怎么
来处理transcation的。
当open a container的时候,一个transaction 就隐型地开始了,而当close 这个container,
那么当前的transaction就隐型地提交了。
那么如果显型地commit 和 rollback呢? 下面有这么两个例子:
public static void storeCarCommit(ObjectContainer db) {
Pilot pilot=new Pilot("Rubens Barrichello",99);
Car car=new Car("BMW");
car.setPilot(pilot);
db.set(car);
db.commit();
}
public static void storeCarRollback(ObjectContainer db) {
Pilot pilot=new Pilot("Michael Schumacher",100);
Car car=new Car("Ferrari");
car.setPilot(pilot);
db.set(car);
db.rollback();
}
与JDBC相比,好像有一个区别就是,db4o不需要来设置commit的模式, setAutoCommit()
她就是如果db.close(),那么就autoCommit了。
对于Object Database,因为他们都是用object 来存取,那么当object 被set 相应的值后,但没有save到database,也就说
current transaction 被rollback,那么为了保持数据的一致性,需要refresh live object.那么这个怎么来实现呢?
public static void carSnapshotRollbackRefresh(ObjectContainer db)
{
ObjectSet result=db.get(new Car("BMW"));
Car car=(Car)result.next();
car.snapshot();
db.set(car);
db.rollback();
PDF by iText, generated by Doctor, courtesy of db4objects Inc.
db.ext().refresh(car,Integer.MAX_VALUE);
System.out.println(car);
}
6.Embedded server
对应 Embedded server,open一个port为0的server。
[accessLocalServer]
ObjectServer server=Db4o.openServer(Util.YAPFILENAME,0);
try {
PDF by iText, generated by Doctor, courtesy of db4objects Inc.
ObjectContainer client=server.openClient();
// Do something with this client, or open more clients
client.close();
}
finally {
server.close();
}
7.Networking
[accessRemoteServer]
ObjectServer server=Db4o.openServer(Util.YAPFILENAME,PORT);
server.grantAccess(USER,PASSWORD);
try {
ObjectContainer
client=Db4o.openClient("localhost",PORT,USER,PASSWORD);
// Do something with this client, or open more clients
client.close();
}
finally {
server.close();
}
- Object DataBase--db4o之旅(2)
- Object DataBase --DB4O之旅(1)
- 开源面向对象数据库 db4o 之旅,第 2 部分: db4o 查询方式
- 开源面向对象数据库 db4o 之旅,第 2 部分: db4o 查询方式
- 开源面向对象数据库 db4o 之旅,第 2 部分: db4o 查询方式
- 开源面向对象数据库 db4o 之旅,第 2 部分: db4o 查询方式
- git学习--object database
- 开源面向对象数据库 db4o 之旅,第 1 部分: 初识 db4o
- 开源面向对象数据库 db4o 之旅,第 3 部分: 深入db4o
- 开源面向对象数据库 db4o 之旅,第 1 部分: 初识 db4o
- 开源面向对象数据库 db4o 之旅,第 3 部分: 深入db4o
- 开源面向对象数据库 db4o 之旅,第 1 部分: 初识 db4o
- 开源面向对象数据库 db4o 之旅,第 3 部分: 深入db4o
- 开源面向对象数据库 db4o 之旅
- 开源面向对象数据库 db4o 之旅
- Object/database
- android学习之db4o数据库
- Db4o系列之十八:基于Db4o的WEB应用
- winpcap 资料
- SqlServer 和 Oracle 常用数学函数比较
- 如何快速有效地记忆日语单词
- 玩转RAW格——基础篇
- 关于winpcap的一些认识
- Object DataBase--db4o之旅(2)
- T2定时器应用
- 玩转RAW格式——基础篇(二)
- JSP调用Servlet显示图片
- MATLAB的数据显示格式
- JS中找到鼠标点击的坐标
- ACL 模型
- MATLAB的常用的三角函数 计算函数
- PCI设备操作--枚举