Где поставить аннотации для спящего режима?
Где я могу добавить аннотации для спящего режима?
Является ли это строкой над моей переменной экземпляра? Или перед геттером? Или перед сеттером? Или это не имеет значения?
Спасибо большое
Ответы
Ответ 1
Вы размещаете их либо на поле, либо на получателе. Из справочника Hibernate Annotations:
(...)
В зависимости от того, комментируете ли вы поля или методы, тип доступа используемый Hibernate, будет полем или имущество. Спецификация EJB3 требует, чтобы вы объявляете аннотации к элементу тип, к которому будет доступен доступ, т.е. getter, если вы используете свойство доступ, поле, если вы используете поле доступ. Смешивание аннотаций в обоих полей и методов следует избегать. Hibernate угадает тип доступа с позиции @Id или @EmbeddedId.
Вы также можете прочитать о аннотации @Access
, которая позволяет принудительно/переопределить тип доступа (до Hibernate Annotations 3.5 и JPA 2.0, это было частью расширений аннотации Hibernate):
По умолчанию тип доступа класса иерархия определяется положением аннотаций @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.