Annotation Type Where


  • @Target({TYPE,METHOD,FIELD})
    @Retention(RUNTIME)
    public @interface Where
    Specifies a restriction written in native SQL to add to the generated SQL for entities or collections.

    For example, @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 WhereJoinTable annotation lets a restriction be applied to an association table:

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

    By default, @Where restrictions declared for an entity are applied when loading associations of that entity type. This behavior can be disabled using the setting "hibernate.use_entity_where_clause_for_collections"; note, however, that setting is disabled.

    Note that @Where restrictions are always applied and cannot be disabled. Nor may they be parameterized. They're therefore much less flexible than filters.

    See Also:
    Filter, DialectOverride.Where, AvailableSettings.USE_ENTITY_WHERE_CLAUSE_FOR_COLLECTIONS, WhereJoinTable
    • Required Element Summary

      Required Elements 
      Modifier and Type Required Element Description
      String clause
      A predicate, written in native SQL.
    • Element Detail

      • clause

        String clause
        A predicate, written in native SQL.