2016-11-07 6 views
0

в JPA 2.0, что является отличием между аннотированием поля и аннотированием метода (как правило, геттера)?JPA 2.0 аннотация поля и аннотация метода

Пример с полем аннотацию

@Entity 
public class MainEntity { 

    @Id 
    private Long id 

    @OneToMany 
    private RelatedEntity relatedEntity 

    //getters and setters and possible other methods 
    ... 

} 

Пример с использованием метода аннотацию

@Entity 
public class MainEntity { 

    @Id 
    private Long id; 

    private RelatedEntity relatedEntity 

    //getters and setters and possible other methods 
    @OneToMany 
    public RelatedEntity getRelatedEntity(){ 
      return relatedEntity 
    } 

    //other methods etc 
    ... 

} 
+3

В чем разница? В одном вы аннотируете поле, а другое - метод! Для настойчивости нет никакой разницы, поскольку провайдеры JPA поддерживают оба пути. Кроме того, он полностью основан на мнениях –

ответ

1

С помощью JPA вы можете использовать оба метода для сопоставления столбцов таблицы в классе объектов; доступ к полям/методам ничего не меняет с точки зрения генерации схемы или с точки зрения переведенных запросов. Вообще говоря, аннотация поля полезна более чистая (фреймворки вроде Spring поощряют ее), аннотации методов могут предоставить вам большую гибкость (например, с наследованием от абстрактного класса сущностей).

Пожалуйста, обратите внимание, что в вашем втором примере есть ошибка:

@Entity 
public class MainEntity { 

    private Long id; 

    private RelatedEntity relatedEntity 

    //getters and setters and possible other methods 
    @Id 
    public Long getId() { 
     return id; 
    } 

    @OneToMany 
    public RelatedEntity getRelatedEntity(){ 
      return relatedEntity 
    } 

    //other methods etc 
    ... 
} 
1

С точки зрения пользователя нет никакой разницы, пока она не согласуется, но с использованием аннотаций в разных местах изменить поведение JPA провайдера (спящий режим, EclipseLink и т. д.).

Место, где были выставлены аннотации, предоставляет информацию о поставщике JPA, о которой access type вам что использовать. Если вы смешиваете эти аннотации настроек в обоих местах, поставщик выбирает один и игнорирует отдых. В примере во втором списке hibernate будет игнорировать @Id, потому что у вас есть @OneToMany по методу, и это означает, что вы предпочитаете использовать AccessType.PROPERTY.

Конечно, иногда мы не хотим использовать доступ к свойствам, потому что у нас есть некоторые дополнительные методы, которые обеспечивают некоторую логику и соответствуют соглашению об именах. Затем мы должны использовать AccessType.FIELD.

В проекте вы должны использовать согласованный стиль. Смешанный стиль действителен, но вам нужно определить @Access для почти всех элементов вашего POJO.

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