Mapeo de entidades con anotaciones JPA
Defina @Entity, @Table, @Id, @GeneratedValue, @Column y @Embedded para diseñar entidades de forma clara.
Mapeo de entidades con anotaciones JPA es una lección gratuita de Java Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Java Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Java Academy incluye 4 lecciones en total.
¿Qué es el mapeo de entidades JPA?
JPA (Jakarta Persistence API) asigna clases Java a tablas de bases de datos mediante anotaciones. Hibernate es el proveedor de JPA más habitual. No se requiere DDL de SQL: JPA genera los esquemas a partir de las anotaciones.
@Entity y @Table
@Entity marca una clase como entidad JPA. @Table personaliza el nombre de la tabla, el esquema y las restricciones de unicidad. Toda entidad debe tener un constructor sin argumentos (puede ser protected).
@Entity
@Table(name = "users", uniqueConstraints = @UniqueConstraint(columnNames = "email"))
public class User {
// ...
protected User() {} // required by JPA
}@Id y @GeneratedValue
@Id marca el campo de clave primaria. @GeneratedValue configura la estrategia de generación automática: IDENTITY (autoincremento de la base de datos), SEQUENCE (secuencia de la base de datos, mejor para inserciones masivas) o AUTO.
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
}@Column: personalización de columnas
@Column establece el nombre, la longitud, la posibilidad de admitir valores nulos y la unicidad de la columna. Sin esta anotación, el nombre del campo se convierte en el nombre de la columna.
@Column(name = "full_name", nullable = false, length = 100)
private String name;
@Column(name = "email", unique = true, nullable = false)
private String email;
@Column(name = "created_at", updatable = false)
private LocalDateTime createdAt;@Embedded y @Embeddable
Extraiga un grupo de columnas en un objeto de valor reutilizable anotado con @Embeddable. Use @Embedded en la entidad para incluir sus campos.
@Embeddable
public class Address {
private String street, city, country;
@Column(name = "zip_code") private String zipCode;
}
@Entity
public class User {
@Embedded private Address address;
}@Enumerated: persistencia de enumeraciones
Persista las enumeraciones como una cadena con su nombre (STRING) o como un entero ordinal (ORDINAL). Use siempre STRING; los ordinales dejan de ser válidos cuando se reordenan los valores de la enumeración.
@Enumerated(EnumType.STRING)
@Column(nullable = false)
private UserStatus status; // stored as "ACTIVE", "INACTIVE", etc.@CreationTimestamp y @UpdateTimestamp
Anotaciones específicas de Hibernate que establecen automáticamente la marca de tiempo al insertar y actualizar, respectivamente; no es necesario usar manualmente @PrePersist.
@CreationTimestamp
@Column(updatable = false)
private LocalDateTime createdAt;
@UpdateTimestamp
private LocalDateTime updatedAt;@Transient: exclusión de campos
Los campos anotados con @Transient no se persisten. Úselo para campos derivados o calculados que no deben almacenarse en la base de datos.
@Transient
public String getFullName() { return firstName + " " + lastName; }@Lob: objetos grandes
Use @Lob para asignar columnas de texto grande (TEXT/CLOB) o binarias (BLOB). PostgreSQL asigna @Lob String a TEXT.
@Lob
@Column(name = "content")
private String content; // maps to TEXT in PostgreSQLContrato de equals y hashCode
Las entidades JPA que se usan en colecciones deben implementar equals / hashCode basándose en la clave de negocio (no en el ID generado, que es null antes de persistir). Use @NaturalId o una clave suplente UUID.
@Override public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof User u)) return false;
return email != null && email.equals(u.email);
}
@Override public int hashCode() { return getClass().hashCode(); }@Version para el bloqueo optimista
Añada un campo @Version. Hibernate lo incrementa en cada actualización. Si dos transacciones actualizan la misma fila simultáneamente, la segunda lanza OptimisticLockException.
@Version
private Long version; // auto-managed by HibernateComprobación rápida
¿Por qué @Enumerated debe usar STRING en lugar de ORDINAL?
Resumen
Use @Entity/@Table para asignar clases a tablas. Use @Id+@GeneratedValue para las claves primarias. Use @Column para las restricciones. Use @Embedded para los objetos de valor. Use siempre @Enumerated(STRING). Añada @Version para el bloqueo optimista.
Preguntas frecuentes
¿La lección «Mapeo de entidades con anotaciones JPA» es gratis?
Sí — el texto completo de «Mapeo de entidades con anotaciones JPA» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Java Academy, actualiza a CoddyKit PRO. El curso de Java Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Mapeo de entidades con anotaciones JPA»?
Defina @Entity, @Table, @Id, @GeneratedValue, @Column y @Embedded para diseñar entidades de forma clara. Practicas Java Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Java Academy?
No se requiere experiencia previa. Java Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.
¿Cuánto tiempo toma la lección «Mapeo de entidades con anotaciones JPA»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Java Academy?
Sí. Cada lección de Java Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Mapeo de entidades con anotaciones JPA
- Repositorios de Spring Data y métodos de consulta
- Relaciones uno a muchos y muchos a muchos
- Paginación, ordenación y proyecciones