Перебирать свойства POJO - PullRequest
       3

Перебирать свойства POJO

2 голосов
/ 01 февраля 2011

Посредством отражения я нашел списки свойств из классов x POJO, которые мне нужно отобразить, а также создал список заголовков, для которых я буду отображать свойства в разделе (заголовки взяты из аннотаций на полях).

Форма POJO такова, что для каждого свойства, которое я хочу отобразить, есть геттер.

Вот подробности: POJO помечены @Entity, я выполняю запрос (используя JPA) и получаю набор результатов.Теперь я хочу отобразить набор результатов (коллекцию определенного POJO), вызвав правильные методы получения.

Я могу вызвать методы получения.Моя проблема заключается в том, что я этого не делал ... Я беспокоюсь, что использование отражения может быть не особенно эффективным для больших наборов результатов, и, возможно, есть способ сделать объекты сущности JPA итеративным итеративным образом.

Например, если естьпростой способ вернуть каждую запись в виде индексируемой коллекции, тогда я могу просто выстроить свои заголовки в порядке, в котором они будут отображаться в каждой записи, и выполнить итерацию.Тогда это не будет POJO, но с инкапсуляцией это может выглядеть так в части API.

Ищете предложения!Это будет работать так или иначе, но я бы предпочел, чтобы это было красиво.

Ответы [ 3 ]

4 голосов
/ 04 февраля 2011

Поскольку вы используете JPA, пробовали ли вы метамодель JPA 2 ( javax.persistence.metamodel ).Это даст вам информацию о ваших сущностях JPA из метаданных JPA:

entityManager.getMetamodel().entity(entityClass). getAttributes();
3 голосов
/ 01 февраля 2011

При использовании отражения вам не нужно обязательно вызывать геттеры в объектах (если геттеры только возвращают значение и не содержат никакой специальной логики), даже если поля являются частными (см. setAccessible .через отражение проходит глубоко вложенные деревья объектов (коллекции в коллекциях) до сотен объектов, каждый из которых может содержать от нескольких до нескольких десятков полей).

1 голос
/ 01 февраля 2011

Я думаю, это не очень хорошая идея. Потому что вы смешиваете логический уровень с уровнем хранения данных. Лучше переопределить метод toString или smt как этот. Если вы все еще хотите реализовать свою идею, самый простой способ - это итерация поля throw и доступ к их значениям с помощью PropertyUtils

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...