2014-01-31 3 views
6

Итак, я узнал, что ключевое слово transient в Java означает, что сущность не сохраняется и что аннотация @Transient в JPA означает, что не сохраняется поле базы данных. Но что это означает, когда @Transient применяется к методу, а не к переменной?Что означает @Transient аннотация для методов?

Это где я нашел его в нашем коде:

@Transient 
public boolean getTabFoo() { 
    if ((this.viewFoo1 != ACCESS_NONE) 
      || (this.viewFoo2 != ACCESS_NONE) || (this.viewFoo3 != ACCESS_NONE) 
      || (this.getViewFoo4() != ACCESS_NONE)) { 
     return true; 
    } 
    return false; 
} 

ответ

6

Все аннотации JPA на уровне поля могут быть размещены либо в полях, либо по свойствам, он определяет тип доступа объекта (то есть, как поставщик JPA будет обращаться к полям этого объекта - напрямую или с помощью геттеров/сеттеров).

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

Так, @Transient на получателях имеет такое же значение, как @Transient на полях - если тип доступа по умолчанию для объекта является доступом к свойству, необходимо аннотировать все добытчик, которые не соответствуют сохраняемым свойствам с @Transient.

+0

Спасибо, что делает его намного яснее. Значит, он используется только для метода, потому что это геттер? – starsplusplus

0

Ну его правильный метод геттер, который JPA по умолчанию будет считать связан со свойством объекта. Если вы не хотите, чтобы JPA рассматривала getter как свойство, вы применяете аннотацию @Transient к методу.

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