Annotation Type Any
-
@Target({METHOD,FIELD}) @Retention(RUNTIME) public @interface Any
Maps a to-one cardinality association taking values over several entity types which are not related by the usual entity inheritance, using a discriminator value stored on the referring side of the relationship.This is quite different to discriminated inheritance where the discriminator is stored along with the referenced entity hierarchy.
For example, consider an
Orderentity containingPaymentinformation, where aPaymentmight be aCashPaymentor aCreditCardPayment. An@Anymapping would store the discriminator value identifying the concrete type ofPaymentalong with the state of the associatedOrder, instead of storing it with thePaymententity itself.In this example,
Paymentwould not be declared as an entity type, and would not be annotated@Entity. It might even be an interface, or at most just a mapped superclass, ofCashPaymentandCreditCardPayment. So in terms of the object/relational mappings,CashPaymentandCreditCardPaymentwould not be considered to participate in the same entity inheritance hierarchy.It's reasonable to think of the "foreign key" in an
Anymapping is really a composite value made up of the foreign key and discriminator taken together. Note, however, that this composite foreign key is only conceptual and cannot be declared as a physical constraint on the relational database table.AnyDiscriminator,JdbcType, orJdbcTypeCodespecifies the type of the discriminator.AnyDiscriminatorValuesspecifies how discriminator values map to entity types.ColumnorFormulaspecifies the column or formula in which the discriminator value is stored.AnyKeyJavaType,AnyKeyJavaClass,AnyKeyJdbcType, or orAnyKeyJdbcTypeCodespecifies the type of the foreign key.JoinColumnspecifies the foreign key column.
Anymappings are disfavored, except in extremely special cases, since it's much more difficult to enforce referential integrity at the database level.- See Also:
ManyToAny
-
-
Element Detail
-
fetch
FetchType fetch
Defines whether the value of the field or property should be lazily loaded or must be eagerly fetched. The EAGER strategy is a requirement on the persistence provider runtime that the value must be eagerly fetched. The LAZY strategy is applied when bytecode enhancement is used. If not specified, defaults to EAGER.- Default:
- jakarta.persistence.FetchType.EAGER
-
-