Я сохраняю свои сущности в базе данных eXist XML и использую имя файла (идентификатор ресурса) в качестве идентификатора сущности.
Пример:
String xquery = "for $movie in collection('/db/movie')//movie "
+ "return $movie";
После выполнения этого запросаЯ извлекаю экземпляр org.xmldb.api.base.Resource
, содержимое которого я использую для создания объекта.Когда я хочу установить идентификатор этой сущности, я делаю это следующим образом:
dvd.setId(rs.getId());
Проблема в том, что если я выполню запрос следующим образом:
String xquery = "for $dvd in collection('/db/dvd')//dvd "
+ "return <dvd>"
+ "{$dvd/title}"
+ "{$dvd/type}"
+ "{"
+ "<content>"
+ " {"
+ " for $movie in $dvd/content//movie"
+ " let $movieIn := doc(concat(\"/db/movie/\", $movie/@id))/movie"
+ " return "
+ " <movie id=\"{$movie/@id}\">"
+ " {$movieIn/name}"
+ " {$movieIn/director}"
+ " {$movieIn/year}"
+ " {$movieIn/country}"
+ " {$movieIn/actors}"
+ " {$movieIn/genres}"
+ " </movie>"
+ " }"
+ "</content>"
+ "}"
+ "</dvd>";
rs.getId()
возвращаетnull
.Я также попробовал метод getDocumentId()
из этого класса , но он также возвращает null
.Есть ли способ заставить его возвращать идентификатор ресурса (который является именем файла, в котором хранится сущность)?
Если это невозможно, есть ли способ (функция или что-то)получить имя файла, с которым я работаю (я имею в виду, база данных получает данные) с помощью запроса XQuery?
Я пытался заменить эту строку:
+ "return <dvd>"
наэто:
+ "return <dvd id=\"{$dvd}\">"
(чтобы я мог получить имя файла из атрибута), но он не возвращает имя файла.