@NamedQuery(name = "Order.findOpen", query = "select o from Order o where o.status = 'OPEN'")@Entitypublic class Order { ... }em.createNamedQuery("Order.findOpen", Order.class).getResultList();
9. Implementing Custom Type Converters
Example: AttributeConverter
@Converter(autoApply = true)public class MoneyConverter implements AttributeConverter<Money, Long> { public Long convertToDatabaseColumn(Money m) { return m == null ? null : m.cents(); } public Money convertToEntityAttribute(Long c) { return c == null ? null : Money.usd(c); }}
10. Implementing ID Generation Strategies
Strategy
Trade-off
IDENTITY
Simple; defeats batch insert
SEQUENCE
Best for batch; PG/Oracle
TABLE
Portable; slower
UUID
Distributed-friendly
Application-assigned
Domain controls; ULID/UUIDv7
11. Implementing Composite Primary Keys
Example: @EmbeddedId
@Embeddablepublic record OrderLineId(Long orderId, int lineNo) implements Serializable {}@Entitypublic class OrderLine { @EmbeddedId private OrderLineId id;}
12. Implementing Optimistic Locking
Example: @Version
@Entitypublic class Account { @Id private Long id; @Version private Long version; // auto-incremented; throws OptimisticLockException on stale write private long balanceCents;}