我将实体存储在 eXist XML 数据库中,并使用文件名(资源 ID)作为实体的 ID。
例子:
String xquery = "for $movie in collection('/db/movie')//movie "
+ "return $movie";
执行此查询后,我检索org.xmldb.api.base.Resource
用于创建实体的内容的实例。当我想设置这个实体的 id 时,我这样做:
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
了。有没有办法让它返回资源的 id(这是实体存储的文件的名称)?
如果不可能,有没有办法(函数或其他东西)使用 XQuery 查询获取我正在使用的文件的文件名(我的意思是,数据库从中检索数据)?
我尝试替换这一行:
+ "return <dvd>"
有了这个:
+ "return <dvd id=\"{$dvd}\">"
(这样我就可以从属性中获取文件名)但它不返回文件名。