Package jakarta.persistence
Annotation Interface NamedNativeQuery
@Repeatable(NamedNativeQueries.class)
@Target(TYPE)
@Retention(RUNTIME)
public @interface NamedNativeQuery
Declares a named native SQL query and, optionally, the mapping
of the result of the native SQL query. Query names are scoped
to the persistence unit. A named query may be executed by
calling
or using the elements of this annotation:
EntityManager.createNamedQuery(String, Class)
.
In simple cases, a resultClass()
specifies how the
native SQL query result set should be interpreted, for example:
@NamedNativeQuery(
name = "findWidgets",
query = "SELECT o.id, o.quantity, o.item " +
"FROM Order o, Item i " +
"WHERE (o.item = i.id) AND (i.name = 'widget')",
resultClass = com.acme.Order.class
)
In more complicated cases, a result set mapping is needed, which may be specified using either a separate annotation:
@NamedNativeQuery(
name = "OrderItems",
query = "SELECT o.id, o.quantity, o.item, i.id, i.name, i.description " +
"FROM Order o, Item i " +
"WHERE (o.quantity > 25) AND (o.item = i.id)",
resultSetMapping = "OrderItemResults"
)
@SqlResultSetMapping(name="OrderItemResults", entities={
@EntityResult(entityClass=com.acme.Order.class),
@EntityResult(entityClass=com.acme.Item.class)
})
@NamedNativeQuery(
name = "OrderItems",
query = "SELECT o.id, o.quantity, o.item, i.id, i.name, i.description " +
"FROM Order o, Item i " +
"WHERE (o.quantity > 25) AND (o.item = i.id)",
resultSetMapping = "OrderItemResults");
entities={
@EntityResult(entityClass=com.acme.Order.class),
@EntityResult(entityClass=com.acme.Item.class)
}
)
The NamedNativeQuery
annotation can be applied to
an entity class or mapped superclass.
- Since:
- 1.0
- See Also:
-
Required Element Summary
Modifier and TypeRequired ElementDescriptionThe name used to identify the query in calls toEntityManager.createNamedQuery(java.lang.String)
.The native SQL query string. -
Optional Element Summary
Modifier and TypeOptional ElementDescriptionSpecifies the result set mapping to constructors.Specifies the result set mapping to scalar values.Specifies the result set mapping to entities.Query properties and hints.Class
<?> The class of each query result.The name of aSqlResultSetMapping
, as defined in metadata.
-
Element Details
-
name
String nameThe name used to identify the query in calls toEntityManager.createNamedQuery(java.lang.String)
. -
query
String queryThe native SQL query string. -
hints
QueryHint[] hintsQuery properties and hints. (May include vendor-specific query hints.)- Default:
{}
-
resultClass
Class<?> resultClassThe class of each query result. If aresult set mapping
is specified, the specified result class must agree with the type inferred from the result set mapping. If aresultClass
is not explicitly specified, then it is inferred from the result set mapping, if any, or defaults toObject
orObject[]
. The query result class may be overridden by explicitly passing a class object toEntityManager.createNamedQuery(String, Class)
.- Default:
void.class
-
resultSetMapping
String resultSetMappingThe name of aSqlResultSetMapping
, as defined in metadata. The named result set mapping is used to interpret the result set of the native SQL query.Alternatively, the elements
entities()
,classes()
, andcolumns()
may be used to specify a result set mapping. These elements may not be used in conjunction withresultSetMapping
.- Default:
""
-
entities
EntityResult[] entitiesSpecifies the result set mapping to entities. May not be used in combination withresultSetMapping()
.- Since:
- 3.2
- Default:
{}
-
classes
ConstructorResult[] classesSpecifies the result set mapping to constructors. May not be used in combination withresultSetMapping()
.- Since:
- 3.2
- Default:
{}
-
columns
ColumnResult[] columnsSpecifies the result set mapping to scalar values. May not be used in combination withresultSetMapping()
.- Since:
- 3.2
- Default:
{}
-