Core Entity Mapping Annotations
@Entity
Marks a class as a persistent entity. Without parameters, the table name matches the class name. Use @Entity(name="custom_table") to override the default table name.
@Table
Specifies the database table name for an entity: @Table(name="user_data")
@Id and @GeneratedValue
Defines the primary key and its generation strategy:
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Long identifier;
@Column
Configures column mapping with various attributes:
@Column(
name = "user_name",
nullable = false,
length = 50,
insertable = true,
updatable = false
)
private String username;
Dynamic SQL and Immutability
@DynamicInsert and @DynamicUpdate
Enables dynamic SQL generation for insert and update operations:
@Entity
@DynamicInsert
@DynamicUpdate
public class UserEntity {
// class implementation
}
@Immutable
Marks entities as read-only, preventing UPDATE sattements and enabling performance optimizations.
Validation and Constraints
@Basic
Defines basic attribute mapping with optional constraints:
@Basic(optional = false)
private String requiredField;
@NotNull
Provides runtime validation (doesn't affect DDL generation):
@NotNull(message = "Value cannot be null")
private String mandatoryField;
Access Strategies
@Access
Controls field vs property access strategy:
@Access(AccessType.FIELD) // Field-based access
private String data;
@Access(AccessType.PROPERTY) // Property-based access
public String getData() { return data; }
Advanced Mapping Features
@Formula
Defines computed properties using SQL expressions:
@Formula("CONCAT(first_name, ' ', last_name)")
private String fullName;
@ColumnTransformer
Transforms values during read/write operations:
@Column(name = "weight_grams")
@ColumnTransformer(
read = "weight_grams / 1000",
write = "? * 1000"
)
private Double weightKg;
@Generated
Handles database-generated values via triggers:
@Column(insertable = false, updatable = false)
@Generated(GenerationTime.INSERT)
private String autoGeneratedValue;
Temporal and Enumeration Handling
@Temporal
Specifies temporal type mapping:
@Temporal(TemporalType.TIMESTAMP)
private Date createdDate;
@CreationTimestamp and @UpdateTimestamp
Automatically manages creation and update timestamps:
@CreationTimestamp
@Column(updatable = false)
private Date createdOn;
@UpdateTimestamp
@Column(insertable = false)
private Date modifiedOn;
@Enumerated
Controls enum storage strategy:
@Enumerated(EnumType.STRING)
private UserStatus status;
Component and Inheritance Mapping
@Embeddable
Defines embeddable component classes:
@Embeddable
public class Address {
@Column(nullable = false)
private String street;
@Column(nullable = false)
private String postalCode;
}
@AttributeOverrides
Overrides embedded component column mappings:
@AttributeOverrides({
@AttributeOverride(name = "street", column = @Column(name = "delivery_street")),
@AttributeOverride(name = "postalCode", column = @Column(name = "delivery_zip"))
})
private Address deliveryAddress;
@MappedSuperclass
Defines non-persistent superclass properties inherited by entities.
@Inheritance
Configures inheritance strategies:
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class BaseEntity {
// common properties
}
Type Conversion and Large Objects
@Lob
Maps large object types (BLOB/CLOB).
@Type
Uses Hibernate type adapters:
@Type(type = "yes_no")
private Boolean verified;
@Convert
Applies custom value converters:
@Convert(converter = CurrencyConverter.class)
private MonetaryAmount price;