Hibernate/JPA - аннотирование бобовых методов по сравнению с полями [дубликат]

Использование API данных JavaScript:

var loadInfo = function (videoId) {
    var gdata = document.createElement("script");
    gdata.src = "http://gdata.youtube.com/feeds/api/videos/" + videoId + "?v=2&alt=jsonc&callback=storeInfo";
    var body = document.getElementsByTagName("body")[0];
    body.appendChild(gdata);
};

var storeInfo = function (info) {
    console.log(info.data.title);
};

Тогда вам просто нужно позвонить loadInfo(videoId).

Дополнительная информация доступна в документации API .

35
задан benstpierre 2 June 2009 в 21:37
поделиться

3 ответа

Да, я считаю, что вы хотите искать по полю, а не по доступу к свойствам:

Hibernate Annotations - Что лучше, доступ к полю или свойству?

Предпочтение Spring - поле доступ . Я следую этому.

15
ответ дан 27 November 2019 в 07:01
поделиться

Да, если вы аннотируете поля, Hibernate будет использовать доступ к полю для установки и получения этих полей. Если вы аннотируете методы, hibernate будет использовать геттеры и сеттеры. Hibernate выберет метод доступа в зависимости от местоположения аннотации @Id , и, насколько мне известно, вы не можете смешивать и сопоставлять. Если вы аннотируете поле с помощью @Id , аннотации к методам будут проигнорированы, и наоборот. Вы также можете вручную установить метод с помощью аннотации уровня класса @AccessType

Справочное руководство Hibernate Annotations оказалось чрезвычайно полезным ресурсом для подобных вопросов и подробностей о том, как типы доступа каскадируются вниз иерархии.

43
ответ дан 27 November 2019 в 07:01
поделиться

Моя рекомендация - аннотировать методы. Поступая таким образом, вы получаете некоторую гибкость. Например, допустим, у вас есть несколько классов:

  • AbstractEntity
  • StringIdEntity
  • AutoIdEntity

AbstractEntity определяет поле id/геттер/сеттер. Классы StringIdEntity и AutoIdEntity наследуют от AbstractEntity, но используют разные стратегии @Id. Если вы аннотируете поле, вы не сможете изменить его от класса к классу.

Если вы аннотируете методы, вы помечаете getId() как @Transient/abstract в AbstractEntity, а затем в подклассах вы просто переопределяете метод и применяете стратегию, которую хотите использовать. Я сам раньше аннотировал поля, но столкнулся с этим и решил, что в дальнейшем всегда буду аннотировать методы.

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

4
ответ дан 27 November 2019 в 07:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: