Interface CustomCondition

All Superinterfaces:
Condition

public interface CustomCondition extends Condition

A custom Condition based on a ConditionProvider.

Custom conditions are used to create query conditions that can not be created with the Condition, ColumnCondition or ForeignKeyCondition APIs, for example conditions using JOINs or native DBMS functionality.

A ConditionType is associated with a ConditionProvider, which is responsible for creating the condition string via ConditionProvider.toString(List, List).

 
 // Custom condition with values
 Track.TYPE.define(
     ...
 ).condition(Track.NOT_IN_PLAYLIST, (columns, values) ->
         new StringBuilder("""
                 trackid NOT IN (
                     SELECT trackid
                     FROM chinook.playlisttrack
                     WHERE playlistid IN ("""
                  )
                 .append(String.join(", ",
                         Collections.nCopies(values.size(), "?")))
                 .append(")\n")
                 .append(")")
                 .toString());

 Condition condition =
         Track.NOT_IN_PLAYLIST.get(Playlist.ID, List.of(42L, 43L));

 // Custom condition without values
 Track.TYPE.define(
     ...
 ).condition(Track.EXCLUDED, (columns, values) ->
         "trackid not in (select trackid from chinook.excluded_tracks)");

 Condition condition = Track.EXCLUDED.get();

 List<Entity> tracks = connection.select(
         Condition.and(Track.NAME.like("The%"), condition));
 
 

The ? substitute character is replaced with the condition values when when the statement is prepared. That relies on the columns List for the value data type, and assumes it contains the Column associated with each value at the same index. If the columns List is empty, no value substitution is performed.

  • Method Details

    • conditionType

      ConditionType conditionType()
      Returns:
      the condition type