我已经编写了自己的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
。
答案 0 :(得分:1)
我认为DataNucleus不支持映射关系的自定义List实现。
如果列表的大小很小,并且您的实现可以支持复制构造函数和List(),则可以映射标准List并实现LoadCallback和StoreCallback来管理转换。显然,如果你在List上有很多持久性操作,它会变得相当混乱......