2016-05-20 1 views
0

После того, как объект извлекается с использованием методов весовых данных JPA JpaRepository, например. findOne, findBy... и т. Д. Мне было интересно, что будет лучшим способом автоматического выполнения какого-либо пользовательского кода, скажем, для инициализации некоторых переходных полей.Spring Data JPA - как установить временные поля после извлечения

Другими словами, предположим, что у меня есть объект пользователя с fullName переходного поля, которое должно быть установлено в виде конкатенации firstName и lastName после извлечения из базы данных, что я должен делать?

ответ

2

Во-первых, если все, что вы хотите, если полное имя, просто напишите метод, который объединяет имя/фамилию на лету. Это не должно быть полем.

Если вам действительно нужно сделать некоторую обработку груза Entity затем зарегистрировать @PostLoad сущности жизненного цикла обратного вызова:

public class MyEntity{ 

    @PostLoad 
    //invoked by framework on entity load. 
    public void doStuff(){ 
     fullName = forename + " " + surname; 
    } 

    //alternative 
    public String getFullName(){ 
     return forename + " " + surname; 
    } 

https://en.wikibooks.org/wiki/Java_Persistence/Advanced_Topics#Example_of_Entity_event_annotations

+0

Спасибо, @PostLoad работает хорошо. fullName был всего лишь примером - я бы использовал его для более длинных инициализаций. – Sanjay

0

Вы можете использовать @Access(AccessType.Property) для оптимальной настройки переходных полей.

Вы должны упомянуть @Access(AccessType.Property) относительно метода сеттера, а затем вы можете установить значение этого переходного поля в этом методе установки.

В качестве альтернативы в случае репозиториев вы можете очень хорошо написать JPQL что-то вроде этого.

@Query ("SELECT новый Привет (ах * ау, Ax, Ay) FROM Привет а, где t.value = значение:")

, а затем в конструктор установить значение этого transient variable с a.x*a.y

1

Не пробовал сам, но мне кажется, что @PostLoad аннотаций может помочь вам выполнить код, чтобы изменить состояние бизнес-объекта после его извлечения из базы данных.

Но в вашем конкретном случае я бы просто создал метод getFullName, который объединяет firstName и secondName без сохранения значения в bean-компоненте.

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