org.hibernate.annotations.SQLRestriction Maven / Gradle / Ivy
Show all versions of beangle-hibernate-core Show documentation
/*
* Hibernate, Relational Persistence for Idiomatic Java
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
* See the lgpl.txt file in the root directory or .
*/
package org.hibernate.annotations;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
/**
* Specifies a restriction written in native SQL to add to the generated
* SQL for entities or collections.
*
* For example, {@code @SQLRestriction} could be used to hide entity
* instances which have been soft-deleted, either for the entity class
* itself:
*
* @Entity
* @SQLRestriction("status <> 'DELETED'")
* class Document {
* ...
* @Enumerated(STRING)
* Status status;
* ...
* }
*
*
* or, at the level of an association to the entity:
*
* @OneToMany(mappedBy = "owner")
* @SQLRestriction("status <> 'DELETED'")
* List<Document> documents;
*
*
* The {@link SQLJoinTableRestriction} annotation lets a restriction be
* applied to an {@linkplain jakarta.persistence.JoinTable association table}:
*
* @ManyToMany
* @JoinTable(name = "collaborations")
* @SQLRestriction("status <> 'DELETED'")
* @SQLJoinTableRestriction("status = 'ACTIVE'")
* List<Document> documents;
*
*
* Note that {@code @SQLRestriction}s are always applied and cannot be
* disabled. Nor may they be parameterized. They're therefore much
* less flexible than {@linkplain Filter filters}.
*
* @see Filter
* @see DialectOverride.SQLRestriction
* @see SQLJoinTableRestriction
*
* @since 6.3
*
* @author Gavin King
* @author Emmanuel Bernard
*/
@Target({TYPE, METHOD, FIELD})
@Retention(RUNTIME)
public @interface SQLRestriction {
/**
* A predicate, written in native SQL.
*/
String value();
}