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
!
'cmd.getTable()' возвращает нулевое значение :( –
так что вы не указали имя таблицы для данного класса, в соответствии с Javadocs этого метода –
Сначала это не было, относительные аннотации был прокомментирован, но теперь он раскован. Я очистил проект, осмотрел сгенерированные классы и убедился, что файл .class был расширен и имел правильное имя таблицы. Но все же он возвращает null! –