2012-06-13 1 views
1

Grettings !. У меня слишком много проблем со следующим вопросом ... я постараюсь быть настолько ясным, насколько возможно. В настоящее время у меня есть реализация JCR Jackrabbit, работающая в нашем веб-приложении. Все работает нормально, но возникает небольшая (большая) проблема при попытке выполнить определенный поиск.JCR, JackRabbit: создание XPath для поиска Года даты и для значений свойств подносов

Для краткого обзора того, какие данные хранятся, у нас есть 3 класс узлов, называемый «Entry», который расширяет еще один класс узлов с именем «BaseEntry» и расширяет другой, называемый «BaseNode». Класс Entry представляет собой узел в нашей системе JCR и имеет набор свойств (отображаемых как атрибуты соответствующего класса), а также наследует свойства, отображаемые в их суперклассах.

копировать и вставлять, важной частью определения класса и свойств, представляющих интерес ...

@Node(jcrType = "entry", extend = BaseEntry.class) 
public class Entry extends BaseEntry { 

    ... // nothing really important here 
} 

@Node(jcrType = "baseEntry", extend = BaseNode.class, isAbstract = true) 
public abstract class BaseEntry extends BaseNode { 

    @Collection (jcrType = "attachment", 
     collectionConverter = NTCollectionConverterImpl.class) 
    protected List<Attachment> attachments = new ArrayList<Attachment>(); 

    ... 

} 

@Node(jcrType = "baseNode", isAbstract = true) 
public abstract class BaseNode { 

    @Field(jcrName = "name", id = true) 
    protected String name; 

    @Field(jcrName = "creationDate") 
    protected Date creationDate; 

    ... 
} 

1) Как я могу сделать предикат для выбрать только те узлы (записей), которые имеют специфический год в собственности creationDate игнорируя остальные. Атрибут имеет тип Date (в классе), и я думаю, что свойство хранится в формате xs: DateTime, я думаю ... я действительно не очень хорошо знаю ... как он действительно соответствует дате в базовой системе JCR ,

До сих пор я получаю на это ...
должен что-то вроде этого //element(*, entry)[getYear(@creationDate) == <year>]

должно быть целое число, строка, ... я действительно не kwow.

2) Как я могу сделать предикат для выбора только тех узлов (записей), которые содержат вложения, которые имеют имя определенного имени.

Опять класс Attachment, важная часть ...

@Node(jcrType = "attachment", discriminator = true) 
public class Attachment extends BaseNode implements Comparable<Attachment> { 
    ... 
} 

До сих пор я получаю на это .. это работает .. но должно быть лучше:

//element(*, entry) [jcr:contains(./*,'<nameOfInterest>')] 

То, что все друзья, я действительно извиняюсь за отсутствие информации, которую может потребоваться читателю, чтобы лучше понять предысторию вопроса, я думаю, это то, что я могу сделать. Я довольно новичок в Jackrabbit и JCR, и мне нужно на них руки (грязные), не зная очень хорошо, что я делаю .. и не обращая внимания, это стало очень сложным ...

Надеюсь, что любой благотворительная душа может ответить на это и помочь, по крайней мере, немного: D. Спасибо за продвижение. Приветствия. Víctor.

ответ

1

Я не эксперт, но я постараюсь ответить в любом случае:

Вопрос 1

//element(*, entry)[getYear(@creationDate) == <year>] 

Я думаю, вы могли бы использовать:

//element(*, entry)[ 
    @creationDate >= '2001-01-01T00:00:00.0' 
and @creationDate < '2002-01-01T00:00:00.0'] 

Вопрос 2

Выберите только те узлы (записи), которые содержат вложения, имена которых имеют определенное имя.

Я знаю только запрос SQL-2, используя равенство имени узла. Я не уверен, что это то, что вы ищете:

select * from [nt:base] where name() = '<nameOfInterest>' 
+0

Thanks Thomas !!!! Извините за задержку!. – Victor

 Смежные вопросы

  • Нет связанных вопросов^_^