DataNucleus,JDO,如何坚持我自己的List实现?

时间:2012-01-02 20:22:23

标签: java list datanucleus

我已经编写了自己的java.util.List实现,现在我想使用DataNucleus将它存储在MySQL中。我的实现包括一个实现List接口的公共类,以及一个实现该列表节点的私有类。

当我在Eclipse中运行SchemaTool时,只创建了我的Node实现的表,当我运行我的应用程序时,我收到以下错误:

Persistent class "a.b.c.util.DtvList" has no table in the database, but the operation requires it. Please check the specification of the MetaData for this class.

这是我的List实现类的开始......

@PersistenceCapable
@Inheritance(strategy=InheritanceStrategy.COMPLETE_TABLE)
public class DtvList<E extends Comparable<E>> implements List {
    @Persistent
    private DtvListNode first = null;
    private DtvListNode last = null;
    private int length = 0;
    public DtvList(){};

此外,我只有add(E object)方法的实现,所有其他方法抛出RuntimeException。这可能是问题吗?

PS 我也尝试过实现更多的方法,比如getIterator和其他方法,我甚至尝试编写一个映射插件(http://www.datanucleus.org/extensions/rdbms_java_types.html) ,但无济于事。 TABLE不会由数据库中的SchemaTool创建。

PS / 2 为DtvListNode实现添加了Mapping类,现在我有一个DtvList表,但没有DtvListNode表。它仍然无法正常工作。但我仍然得到DtvList表不存在的异常 org.datanucleus.store.exceptions.NoTableManagedException

1 个答案:

答案 0 :(得分:1)

我认为DataNucleus不支持映射关系的自定义List实现。

如果列表的大小很小,并且您的实现可以支持复制构造函数和List(),则可以映射标准List并实现LoadCallback和StoreCallback来管理转换。显然,如果你在List上有很多持久性操作,它会变得相当混乱......