- Use `@Data` for DTOs (generates getters, setters, equals, hashCode, toString) — use `@Value` for immutable classes.
- Use `@Builder` for complex object construction — combine with `@AllArgsConstructor(access = AccessLevel.PRIVATE)` to enforce builder usage.
- Use `@Slf4j` for logging instead of manually creating logger fields — it generates `private static final Logger log = LoggerFactory.getLogger()`.
- Use `@Value` for immutable data classes (all fields `final`, no setters).
- Use `@RequiredArgsConstructor` with `final` fields for constructor injection (Spring-compatible).
- Use `@Builder.Default` for default values in builder patterns.
- Avoid `@Data` on JPA entities — implement `equals`/`hashCode` manually using business keys.