All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.hibernate.annotations.Where Maven / Gradle / Ivy

There is a newer version: 6.6.2.Final
Show newest version
/*
 * 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 @Where} could be used to hide entity instances which * have been soft-deleted, either for the entity class itself: *

 * @Entity
 * @Where(clause = "status <> 'DELETED'")
 * class Document {
 *     ...
 *     @Enumerated(STRING)
 *     Status status;
 *     ...
 * }
 * 
*

* or, at the level of an association to the entity: *

 * @OneToMany(mappedBy = "owner")
 * @Where(clause = "status <> 'DELETED'")
 * List<Document> documents;
 * 
*

* The {@link WhereJoinTable} annotation lets a restriction be applied to * an {@linkplain jakarta.persistence.JoinTable association table}: *

 * @ManyToMany
 * @JoinTable(name = "collaborations")
 * @Where(clause = "status <> 'DELETED'")
 * @WhereJoinTable(clause = "status = 'ACTIVE'")
 * List<Document> documents;
 * 
*

* By default, {@code @Where} restrictions declared for an entity are * applied when loading associations of that entity type. This behavior can * be disabled using the setting {@value org.hibernate.cfg.AvailableSettings#USE_ENTITY_WHERE_CLAUSE_FOR_COLLECTIONS}; * note, however, that setting is disabled. *

* Note that {@code @Where} restrictions 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.Where * @see org.hibernate.cfg.AvailableSettings#USE_ENTITY_WHERE_CLAUSE_FOR_COLLECTIONS * @see WhereJoinTable * * @author Emmanuel Bernard */ @Target({TYPE, METHOD, FIELD}) @Retention(RUNTIME) public @interface Where { /** * A predicate, written in native SQL. */ String clause(); }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy