Por 9.99€ al mes tendrás acceso completo a todos los cursos. Sin matrícula ni permanencia.
Entidades embebidas
Permiten definir un grupo de propiedades en una clase externa. Son útiles cuando queremos evitar consultas 1 a 1 que restarían eficiencia a nuestra aplicación.
La siguiente estructura de clases dará lugar a una única tabla en la base de datos que contendrá la suma de todos los atributo.
@Entity
public class Autor {
...
@Embedded
private Direccion direccion;
@Embeddable
public class Direccion {
private String calle;
private int numero;
private int piso;
private int puerta;
Si quieres que la entidad embebida sea además clave primaria, usaremos la etiqueta @EmbeddedID en lugar de @Embedded,
Para no tener el siguiente error, tendremos que pasarle una dirección al autor siempre que lo vayamos a salvar.
javax.persistence.PersistenceException: org.hibernate.PropertyValueException: not-null property references a null or transient value ...
Para evitar este error, podemos hacer que la propiedad @Embeddable y que al menos una de sus propiedades acepten valores nulos, utilizando la siguiente anotación:
@Column(nullable = true)
Claves primarias compuestas
Ejercicio
A partir de las siguientes entidades, salvar en la base de datos una sucursal y su correspondiente cuenta vinculada a dicha sucursal.

@Getter @Setter
@Entity
@IdClass(CuentaSucursalPK.class)
public class Cuenta {
@Id
private int nCuenta;
@Id
@ManyToOne
private Sucursal sucursal;
private int saldo;
}
@Getter @Setter
public class CuentaSucursalPK implements Serializable {
private int nCuenta;
private Sucursal sucursal;
@Override
public int hashCode() {
return Objects.hash(nCuenta, sucursal);
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
CuentaSucursalPK other = (CuentaSucursalPK) obj;
return nCuenta == other.nCuenta && sucursal.getNSucursal() == other.getSucursal().getNSucursal();
}
}
Añadir campos a una relación n-n
Crear un alumno, una asignatura, y vincularlos.
@Getter @Setter
@Entity
public class AlumnoAsignatura {
@Id
@GeneratedValue
private int id;
@ManyToOne
@JoinColumn(name = "alumnoId")
private Alumno alumno;
@ManyToOne
@JoinColumn(name = "asignaturaId")
private Asignatura asignatura;
private int horasLectivas;
}