Подтвердить что ты не робот

Где поставить аннотации для спящего режима?

Где я могу добавить аннотации для спящего режима?

Является ли это строкой над моей переменной экземпляра? Или перед геттером? Или перед сеттером? Или это не имеет значения?

Спасибо большое

4b9b3361

Ответ 1

Вы размещаете их либо на поле, либо на получателе. Из справочника Hibernate Annotations:

2.2.1. Пометка POJO как постоянного объекта

(...)

В зависимости от того, комментируете ли вы поля или методы, тип доступа используемый Hibernate, будет полем или имущество. Спецификация EJB3 требует, чтобы вы объявляете аннотации к элементу тип, к которому будет доступен доступ, т.е. getter, если вы используете свойство доступ, поле, если вы используете поле доступ. Смешивание аннотаций в обоих полей и методов следует избегать. Hibernate угадает тип доступа с позиции @Id или @EmbeddedId.

Вы также можете прочитать о аннотации @Access, которая позволяет принудительно/переопределить тип доступа (до Hibernate Annotations 3.5 и JPA 2.0, это было частью расширений аннотации Hibernate):

2.2.2.2. Тип доступа

По умолчанию тип доступа класса иерархия определяется положением аннотаций @Id или @EmbeddedId. Если эти аннотации находятся на поле, то учитываются только поля настойчивость и доступ к государству через поле. Если есть аннотации находятся на геттере, тогда только геттеры рассматриваются настойчивость и доступ к состоянию через геттер/сеттер. Это хорошо работает в и рекомендуется Подход.

Примечание

     

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

Однако в некоторых ситуациях вам нужно в:

  • принудительно введите тип доступа иерархии объектов
  • переопределить тип доступа определенного объекта в иерархии классов
  • переопределить тип доступа встраиваемого типа

Лучший вариант использования - встраиваемый класс, используемый несколькими объектами, которые может не использовать один и тот же тип доступа. В в этом случае лучше заставить тип доступа в встраиваемом классе уровень.

(...)

Что касается плюсов и минусов обоих стилей, я предлагаю прочитать следующие вопросы:

Ответ 2

Это до вашего стиля. Вы можете поставить его перед полем или до получения. В строгом JPA аннотации по сеттерам игнорируются, но я не уверен, следует ли Hibernate.

Вам либо нужно быть последовательным во всей вашей Entity, либо вам нужно предоставить аннотацию @Access в верхней части класса с режимом по умолчанию, а еще один @Access перед каждым полем/свойством, которое вы хотите отклонить от текущего класса режим.

Ответ 3

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

Ответ 4

Вот описание какой-то важной аннотации, используемой в Hibernate.

@Entity: declares the class as an entity (i.e. a persistent POJO class)

@Table: is set at the class level; it allows you to define the table, catalog, and schema names for your entity mapping. If no @Table is defined the default values are used: the unqualified class name of the entity.

@Id: declares the identifier property of this entity.

@Generated Value: annotation is used to specify the primary key generation strategy to use. If the strategy is not specified by default AUTO will be used.

@Column: annotation is used to specify the details of the column to which a field or property will be mapped. If the @Column annotation is not specified by default the property name will be used as the column name.

Отображение наследования на основе аннотаций в спящем режиме: Существует три вида сопоставлений наследования os в спящем режиме. Они

1.Таблица для иерархии классов:

@Inheritance – Defines the inheritance strategy to be used for an entity class hierarchy. It is specified on the entity class that is the root of the entity class hierarchy.

@DiscriminatorColumn – Is used to define the discriminator column for the SINGLE_TABLE  inheritance mapping strategies. The strategy and the discriminator column are only specified in the root of an entity class hierarchy or sub hierarchy in which a different inheritance strategy is applied

If the @DiscriminatorColumn annotation is missing, and a discriminator column is required, the name of the discriminator column defaults to "DTYPE" and the discriminator type to DiscriminatorType.STRING.

@DiscriminatorValue – Is used to specify the value of the discriminator column for entities of the given type. The DiscriminatorValue annotation can only be specified on a concrete entity class. If the DiscriminatorValue annotation is not specified and a discriminator column is used, a provider-specific function will be used to generate a value representing the entity type. If the DiscriminatorType is STRING, the discriminator value default is the entity name.

2.Таблица для каждой иерархии подкласса:

@InheritanceType – Defines inheritance strategy options. JOINED is a strategy in which fields that are specific to a subclass are mapped to a separate table than the fields that are common to the parent class, and a join is performed to instantiate the subclass. 

@PrimaryKeyJoinColumn – This annotation specifies a primary key column that is used as a foreign key to join to another table.

3.Table для каждой иерархии классов:

@InheritanceType – Defines inheritance strategy options. TABLE_PER_CLASS is a strategy to map table per concrete class.
@AttributeOverrides – This annotation is used to override mappings of multiple properties or fields.

@AttributeOverride – The AttributeOverride annotation is used to override the mapping of a Basic (whether explicit or default) property or field or Id property or field.

Надеюсь, что это поможет получить представление об основной аннотации, используемой в hibenate.