Annotation Interface ColumnResult


@Target(METHOD) @Retention(RUNTIME) @Repeatable(ColumnResult.ColumnResults.class) public @interface ColumnResult
Used in conjunction with the SqlResultSetMapping, NamedNativeQuery, or ConstructorResult annotation to map a column of the SELECT list of a SQL query to a scalar (non-entity) value.

The name() element references the name of a column in the SELECT list—that is, the column alias, if applicable. Scalar result types can be included in the query result by specifying this annotation in the metadata.

Consider the following SQL query:

Query ordersWithItemNames =
        em.createNativeQuery(
            """
               SELECT o.id AS order_id,
                      o.quantity AS order_quantity,
                      o.item AS order_item,
                      i.name AS item_name
               FROM Order o,
               JOIN Item i ON o.item = i.id
               WHERE o.quantity > 25
            """,
            ResultMappings_.MAPPING_ORDERS_WITH_ITEM_NAMES
        );

The result set mapping might be defined as follows:

@SqlResultSetMapping(
    name = "OrdersWithItemNames",
    entities = @EntityResult(
        entityClass = Order.class,
        fields = {
            @FieldResult(name = Order_.ID,
                         column = "order_id"),
            @FieldResult(name = Order_.QUANTITY,
                         column = "order_quantity"),
            @FieldResult(name = Order_.ITEM,
                         column = "order_item")
        }
    ),
    columns = @ColumnResult(name = "item_name")
)
interface ResultMappings {}

At runtime, a ColumnResult annotation is represented by an instance of ColumnMapping in the ResultSetMapping returned by EntityManagerFactory.getResultSetMappings(Class).

This annotation may be placed directly on a method annotated NativeQuery.

@NativeQuery("SELECT count(*) AS title_count FROM books WHERE title LIKE :pattern")
@ColumnResult(name="title_count")
int countBooks(String pattern);
Since:
1.0
See Also:
  • Nested Class Summary

    Nested Classes
    Modifier and Type
    Class
    Description
    static @interface 
     
  • Required Element Summary

    Required Elements
    Modifier and Type
    Required Element
    Description
    (Required) The name of a column in the SELECT clause of a SQL query.
  • Optional Element Summary

    Optional Elements
    Modifier and Type
    Optional Element
    Description
    (Optional) The Java type to which the column type is to be mapped.
  • Element Details

    • name

      String name
      (Required) The name of a column in the SELECT clause of a SQL query.
    • type

      Class<?> type
      (Optional) The Java type to which the column type is to be mapped. If the type element is not specified, the default JDBC type mapping for the column is used.
      Since:
      2.1
      Default:
      void.class