Monday, August 14, 2006

JDO 中的实例回调

你的持久化类可以通过继承javax.jdo.InstanceCallbacks接口来实现回调。这个接口包括4个方法:

jdoPostLoad:这个方法在你的持久化类从数据库中提取数据的时候被JDO实现调用。有关持久字段与数据库字段的映射和提取的描述在JDO源文件中进行描述。

jdoPreStore:这个方法在你向数据库写入数据时被调用。

jdoPreClaer:这个方法在你清除持久化字段的值之前被调用。

jdoPreDelete: 这个方法在从数据库中删除一个对象的时候被调用。

与PersistenceCapable接口不同,如果你要实现回调那么这个接口里的所有方法你都得自己来实现。

下面给出一个实例回调得例子:

public class Host implements InstanceCallbacks

{

//由于InetAddress字段不能被JDO直接持久化,所以我们通过jdoPostLoad和

//jdoPreStore方法间接的通过主机名这个字段来实现对它的存储。

private transient InetAddress address; // 非持久化字段

private String hostName; // 可持久化字段

// 定义一个HashSet对象准备把InetAddress放进去

private Set devices = new HashSet ();

public void jdoPostLoad ()

{

//通过主机名获得 InetAddress

try

{

address = InetAddress.getByName (hostName);

}

catch (IOException ioe)

{

throw new JDOException ("Invalid host name: " + hostName, ioe);

}

}

public void jdoPreStore ()

{

// 获得主机名

hostName = address.getHostName ();

}

public void jdoPreDelete ()

{

// 当主机地址被删除时,删除所有相关的信息

JDOHelper.getPersistenceManager (this).deletePersistentAll (devices);

}

public void jdoPreClear ()

{

}

}

No comments: