Annotation Interface Generated
Retrieval of the generated value might require an additional SQL
select statement, but this not necessary if:
-
the SQL dialect of the database
supports
returningorselect from final table, or -
the JDBC driver
provides a similar capability via
getGeneratedKeys().
@Generated relieves the program of the need to explicitly call
refresh() to synchronize
state held in memory with state generated by the database when a SQL
insert or update is executed.
This is most useful when:
- a database table has a column value populated by a database trigger,
- a mapped column has a default value defined in DDL, in which case
@Generatedis used in conjunction with the@ColumnDefaultannotation, - a SQL expression is used to compute the value of a mapped column,
- a custom SQL
insertorupdatestatement specified by an entity assigns a value to the annotated property of the entity, or transforms the value currently assigned to the annotated property, or - there is no mapped column, and the value of the field is determined
by evaluating a SQL
@Formula.
On the other hand:
- for identity/autoincrement columns mapped to an identifier property,
use
GeneratedValue, and - for columns with a
generated always asclause, prefer theGeneratedColumnannotation, so that Hibernate automatically generates the correct DDL.
A @Generated field may be generated on
inserts, on
updates, or on both inserts and updates,
as specified by the event() member.
By default, @Generated fields are not immutable, and so a field
which is generated on insert may later be explicitly assigned a new value
by the application program, resulting in its value being updated in the
database. If this is not desired, the @Immutable
annotation may be used in conjunction with @Generated to specify
that the field may never be updated after initial generation of its value.
- See Also:
-
Optional Element Summary
Optional ElementsModifier and TypeOptional ElementDescriptionSpecifies the events that cause the value to be generated by the database.A SQL expression used to generate the value of the column mapped by the annotated property.booleanDetermines if the value currently assigned to the annotated property is included in SQLinsertandupdatestatements.
-
Element Details
-
event
EventType[] eventSpecifies the events that cause the value to be generated by the database.- If
EventType.INSERTis included, the generated value will be selected after each SQLinsertstatement is executed. - If
EventType.UPDATEis included, the generated value will be selected after each SQLupdatestatement is executed.
- Default:
{INSERT}
- If
-
sql
String sqlA SQL expression used to generate the value of the column mapped by the annotated property. The expression is included in generated SQLinsertandupdatestatements.- Default:
""
-
writable
boolean writableDetermines if the value currently assigned to the annotated property is included in SQLinsertandupdatestatements. This is useful if:- the generated value is obtained by transforming the assigned property value as it is being written, or
- assigning a value disables generation of a value.
Often used in combination with
SQLInsert,SQLUpdate, orColumnTransformer.write().- Returns:
trueif the current value should be included in SQLinsertandupdatestatements.
- Default:
false
-