2013-08-26 2 views
0

EDIT - это ответ Код, который я ошибочно использовал для редактирования метаданных. Для чтения, используйте следующее:Как получить имя таблицы объекта ПК с помощью Datanucleus v3.2?

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

Я делал это в течение долгого времени, используя предыдущие версии DataNucleus, но я не уверен, почему он больше не работает с v3.2

Этот код не работает, потому что метод getMetaDataForClass теперь всегда возвращает null!

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

Где PMF является PersistenceManagerFactory и clazz является Class<?> объект, представляющий тип класса ПК (то есть упорство, способный) объект, который мне нужно получить имя таблицы для.

Я использую аннотации, чтобы определить мои сопоставления.

Чтобы создать мой PersistenceManagerFactory, я использую следующий код:

JDOHelper.getPersistenceManagerFactory(new FileInputStream(filePath)); 

Где Filepath это путь к файлу properties с достаточным количеством данных, которые были использованы в течение длительного времени без каких-либо изменений.

EDIT: Благодаря Нил «ы ответа, я переключился, используя следующую последовательность кода:

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!

ответ

1

Зачем использовать некоторые внутренние (неподдерживаемые?) API, когда у JDO был API метаданных с JDO v2.x IIRC? Это один здесь http://www.datanucleus.org/products/accessplatform_3_3/jdo/metadata_api.html

+0

'cmd.getTable()' возвращает нулевое значение :( –

+1

так что вы не указали имя таблицы для данного класса, в соответствии с Javadocs этого метода –

+0

Сначала это не было, относительные аннотации был прокомментирован, но теперь он раскован. Я очистил проект, осмотрел сгенерированные классы и убедился, что файл .class был расширен и имел правильное имя таблицы. Но все же он возвращает null! –