Аннотации JPA (Java Persistence API)

Заметка с аннотациями и примерами JPA

 

@Entity javax.persistence.Entity
@Table javax.persistence.Table
@Column javax.persistence.Table
@Id javax.persistence.Id
@GeneratedValue javax.persistence.GeneratedValue
@Version javax.persistence.Version
@OrderBy javax.persistence.OrderBy
@Transient javax.persistence.Transient
@Lob javax.persistence.Lob
@PersistenceContext javax.persistence.PersistenceContext
@Temporal javax.persistence.TemporalType
@Embedded javax.persistence.Embedded
Аннотации для связи ассоциаций
@OneToOne javax.persistence.OneToOne
@ManyToOne javax.persistence.ManyToOne
@OneToMany javax.persistence.OneToMany
@ManyToMany javax.persistence.ManyToMany
@PrimaryKeyJoinColumn javax.persistence.PrimaryKeyJoinColumn
@JoinColumn javax.persistence.PrimaryKeyJoinColumn
@JoinTable javax.persistence.JoinTable
@MapsId javax.persistence.MapsId
Аннотации наследования
@Inheritance javax.persistence.Inheritance
@DiscriminatorColumn javax.persistence.DiscriminatorColumn
@DiscriminatorValue javax.persistence.DiscriminatorValue
Аннотации запросов
@NamedQueries javax.persistence.NamedQueries
@NamedQuery javax.persistence.NamedQuery
@SqlResultSetMapping javax.persistence.SqlResultSetMapping
@EntityResult javax.persistence.EntityResult
Аннотации Hibernate
@Audited org.hibernate.envers.Audited
@NotAudited org.hibernate.envers.NotAudited
@Type org.hibernate.annotations.Type

 

@Entity — Указывает, что данный бин (класс) является сущностью.

@Table — указывает на имя таблицы, которая будет отображаться в этой сущности.

@Column — указывает на имя колонки, которая отображается в свойство сущности.

@Id — id колонки

@GeneratedValue — указывает, что данное свойство будет создаваться согласно указанной стратегии.

@Version — управление версией в записи сущности. При изменении записи увеличится на 1.

@OrderBy — указание сортировки. В примере множество кошек будет отсортировано по имени по возрастанию.

@Transient — указывает, что свойство не нужно записывать. Значения под этой аннотацией не записываются в базу данных (так же не участвуют в сериализации). static и final переменные экземпляра всегда transient.

@Lob — указание на большие объекты.

@PersistenceContext — указывает на зависимость EntityManager в контейнере

@Temporal — применяется к полям или свойствам с типом java.util.Date и java.util.Calendar. Например, если в БД время сохраняется как sql.Date, то чтобы использовать дату из java.util.Date указываем эту аннотацию.

@Embeddable и @Embedded («встроенный») — Определяет класс, экземпляры которого хранятся как неотъемлемая часть исходного объекта. Каждый из @Embedded экземпляров сопоставляется с таблицей базы данных сущности.

Аннотации для ассоциаций: один к одному, один ко многим, многие ко многим и др.
@OneToOne — указывает на связь между таблицами «один к одному».

orphanRemoval — позволяет удалять объекты сироты. При удалении родительского объекта удаляется и дочерний.
@OneToMany(mappedBy=»customer», orphanRemoval=»true»)
mappedBy — обратная сторона связи сущности. Поле под этим атрибутом не сохраняется как часть исходной сущности в базе данных, но будет доступна по запросу. (см. ниже @JoinColumn)
cascade = CascadeType.ALL — означает, что операция, например, записи должна распространяться и на дочерние таблицы.

В этом примере контакт содержит лишь ссылку на таблицу с детальной информацией. Детали контакта будут доступны по запросу к таблице contactDetail.

@PrimaryKeyJoinColumn — главный ключ для ассоциированной сущности с таким же ключом

@JoinColumn — применяется когда внешний ключ находится в одной из сущностей. Может применяться с обеих сторон взаимосвязи. Но рекомендуется применять в сущности, которая является владельцем физической информации (обычно сторона @ManyToOne). ManyToOne (часто) является стороной-владельцем в двунаправленных связях и таким образом противоположная сторона использует @OneToMany(mappedBy=..).

Пример (более распространенное использование mappedBy и JoinColumn)

Менее распространенный вариант (нужно еще менять свойства insertable и updatable). Такое решение менее оптимизировано, но будет работать:

@JoinTable — указывает на связь с таблицей

@ManyToOne — указывает на связь многие к одному.

@OneToMany — указывает на связь один ко многим. Применяется с другой стороны от сущности с @ManyToOne

@ManyToMany — связь многие ко многим.

 

@MapsId — связывает одну колонку с другой. Работает с @Id и @EmbeddedId.

@Inheritance — наследование. Для понимания аннотации необходимо обратиться к руководству Hibernate User Guide (Inheritance)
@DiscriminatorColumn
@DiscriminatorValue

Аннотации запросов

@NamedQueries — внутри указывается список именованных запросов.
@NamedQuery — имя именованного запроса и сам запрос.
@SqlResultSetMapping — куда будет собран результат.
@EntityResult — указание сущности в которой будет сконструирован результат.

Аннотации Hibernate

@Audited — Включает аудит сущности (отслеживание версий).
@NotAudited — указывает, что изменения этого свойства отслеживать не нужно. По умолчанию Hibernate пытается отслеживать изменения в ассоциациях.
@Type указывает на тип свойства

 

Подписаться
Уведомлять о
guest

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

0 комментариев
старым
новым колличеству голосов
Межтекстовые Отзывы
Посмотреть все комментарии
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x
Leo Dev Blog | LD
Обзор конфиденциальности

На сайте используются обязательные и аналитические файлы cookie.

Обязательные cookie необходимы для корректной работы сайта.

Аналитические cookie используются для анализа посещаемости и улучшения работы сайта.

Вы можете изменить настройки использования cookie.