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