#4352 Es muy simple SOLO existen dos maneras de relacionar los objetos:
class Expediente {
Id id;
Usuario usuario;
}
class Usuario {
Id id;
String nombre;
}
class Expediente {
Id id;
Id usuarioId;
}
class Usuario {
Id id;
String nombre;
}
En el primer caso el objeto esta dentro del objeto, es decir cuando hagas una petición a la base de datos, la tabla expediente, te devolverá tambien la información del usuario.
var expediente = repositoryExpediente.get(expedienteId)
print(expediente.usario.nombre)
En el segundo caso usas una FK con el ID, si quieres acceder al nombre de usuario debes hacer OTRA petición a DB.
var expediente = repositoryExpediente.get(expedienteId)
var usuario = repositoryUsuario.get(expediente.UsuarioId)
print(usuario.nombre)
El primer caso se traduce en que tu tabla en la base de datos sera asi:
Expediente Id | Usuario Id | Usuario Nombre |
1 | 1 | Juan |
2 | 2 | María |
3 | 3 | Carlos |
4 | 4 | Ana |
En el segundo caso tienes dos tablas:
Table: Expediente
Expediente Id | Usuario Id |
1 | 1 |
2 | 2 |
3 | 3 |
4 | 4 |
Table: Usuario
Usuario Id | Usuario Nombre |
1 | Juan |
2 | María |
3 | Carlos |
4 | Ana |
Con Spring por defecto si haces lo primero te creara 1 tabla como te he mostrado, pero podrás tener esto:
@Entity
public record Expediente(
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Long id,
@ManyToOne
@JoinColumn(name = "usuario_id")
Usuario usuario
) {}
@Entity
public record Usuario(
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Long id,
String nombre
) {}
Para decirle que haces joinColumn a otra entidad, o si quieres dejar bien claro que esta todo en la misma tabla esto:
@Entity
public record Expediente(
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Long id,
@Embedded
Usuario usuario
) {}
@Embeddable
public record Usuario(
Long id,
String nombre
) {}
Si usas Spring, hibernate/jpa y h2 como base de datos, deberas poder montar varias base de datos y objetos anidados automaticamente en 15 minutos... Creas el objeto, haces repositorio.save(objeto) para ir guardándolos y luego haces los get.