Где я могу добавить аннотации для спящего режима?
Является ли это строкой над моей переменной экземпляра? Или перед геттером? Или перед сеттером? Или это не имеет значения?
Спасибо большое
Где я могу добавить аннотации для спящего режима?
Является ли это строкой над моей переменной экземпляра? Или перед геттером? Или перед сеттером? Или это не имеет значения?
Спасибо большое
Вы размещаете их либо на поле, либо на получателе. Из справочника 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. Если эти аннотации находятся на поле, то учитываются только поля настойчивость и доступ к государству через поле. Если есть аннотации находятся на геттере, тогда только геттеры рассматриваются настойчивость и доступ к состоянию через геттер/сеттер. Это хорошо работает в и рекомендуется Подход.
Примечание
Размещение аннотаций в иерархии классов должно быть согласованным (поле или свойство) способный определять доступ по умолчанию тип. Рекомендуется придерживаться одно единственное размещение аннотаций стратегии на протяжении всего приложение.
Однако в некоторых ситуациях вам нужно в:
- принудительно введите тип доступа иерархии объектов
- переопределить тип доступа определенного объекта в иерархии классов
- переопределить тип доступа встраиваемого типа
Лучший вариант использования - встраиваемый класс, используемый несколькими объектами, которые может не использовать один и тот же тип доступа. В в этом случае лучше заставить тип доступа в встраиваемом классе уровень.
(...)
Что касается плюсов и минусов обоих стилей, я предлагаю прочитать следующие вопросы:
Это до вашего стиля. Вы можете поставить его перед полем или до получения. В строгом JPA аннотации по сеттерам игнорируются, но я не уверен, следует ли Hibernate.
Вам либо нужно быть последовательным во всей вашей Entity, либо вам нужно предоставить аннотацию @Access в верхней части класса с режимом по умолчанию, а еще один @Access перед каждым полем/свойством, которое вы хотите отклонить от текущего класса режим.
Спящий режим, как известно, использует отражение Java. Так что неважно, ставите ли вы его выше поданного или выше получателя.
Вот описание какой-то важной аннотации, используемой в 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.