Java DataNucleus,JDO,如何持久化我自己的列表实现?
我已经编写了自己的java.util.List实现,现在我想使用DataNucleus将其存储在MySQL中。我的实现由一个实现列表接口的公共类和一个实现该列表节点的私有类组成 当我在Eclipse中运行SchemaTool时,只会创建节点实现的表,当我运行应用程序时,会出现以下错误: 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. 持久类“a.b.c.util.DtvList”在数据库中没有表,但操作需要它。请检查此类元数据的规范。 这是我的列表实现类的开始。。。Java DataNucleus,JDO,如何持久化我自己的列表实现?,java,list,datanucleus,Java,List,Datanucleus,我已经编写了自己的java.util.List实现,现在我想使用DataNucleus将其存储在MySQL中。我的实现由一个实现列表接口的公共类和一个实现该列表节点的私有类组成 当我在Eclipse中运行SchemaTool时,只会创建节点实现的表,当我运行应用程序时,会出现以下错误: Persistent class "a.b.c.util.DtvList" has no table in the database, but the operation requires it. Please
@持久的
@继承(策略=继承祖先策略。完成表)
公共类DtvList实现列表{
@持久的
私有DtvListNode first=null;
私有DtvListNode last=null;
私有整数长度=0;
公共DtvList(){};
另外,我只有add(E object)
方法的一个实现,所有其他方法都抛出RuntimeException
。这可能是问题所在吗
PS我还尝试实现了更多的方法,比如getIterator和其他方法,甚至还尝试编写了一个映射插件(http://www.datanucleus.org/extensions/rdbms_java_types.html),但无效。该表不是由数据库中的SchemaTool创建的
PS/2为DtvListNode实现添加了映射类,现在我有了DtvList的表,但不是DtvListNode的表。它仍然不工作。但我仍然得到异常
org.datanucleus.store.exceptions.NoTableManagedException
,即DtvList表不存在。我认为datanucleus不支持自定义List映射关系的实现
如果列表很小,并且您的实现可以支持复制构造函数和to List(),则可以映射标准列表,并实现LoadCallback和StoreCallback来管理转换。显然,如果在该列表上有许多持久性操作,则会变得相当混乱
@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(){};