如何使用数据核心 v3.2 获取 PC 对象的表名?



编辑这就是答案我错误地使用的代码是用于编辑元数据的。要读取它,请使用以下内容:

pmf.getMetadata(Machineclass.getName()).getTable()

我已经使用以前的datanucleus版本做了很长时间,但我不确定为什么它不能再与v3.2 一起工作

此代码不起作用,因为getMetaDataForClass方法现在总是返回null

NucleusJDOHelper.getMetaDataForClass(pmf, clazz).getTable()

其中pmfPersistenceManagerFactoryclazzClass<?>对象,表示我需要检索其表名的PC(即具有持久性)对象的类类型。

我只是使用注释来定义映射。

为了创建我的PersistenceManagerFactory,我使用以下代码:

JDOHelper.getPersistenceManagerFactory(new FileInputStream(filePath));

其中filePath是指向具有足够数据的properties文件的路径,该文件已使用很长时间而没有任何更改。

编辑:由于Neil的回答,我转而使用以下代码序列:

JDOMetadata md = pmf.newMetadata();
PackageMetadata pmd = md.newPackageMetadata(clazz.getPackage());
ClassMetadata cmd = pmd.newClassMetadata(clazz);
return cmd.getTable();

我确保我正在检查的类具有正确的元数据

@PersistenceCapable(table = "machine_table", detachable = "true", cacheable = "true")
public class Machine {

现在cmd.getTable()也返回null

当JDO自JDO v2.x IIRC以来就拥有元数据API时,为什么要使用某些内部(不受支持?)API?这个在这里http://www.datanucleus.org/products/accessplatform_3_3/jdo/metadata_api.html