你的持久化类可以通过继承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 ()
{
}
}
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment