Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

181
Vistas
Compartir clave externa en Hibernate

Mi base de datos se compone de dos tablas: Organisation y User , en una relación ManyToOne , donde una organización puede contener muchos usuarios.

Antes de compartir mi problema, aquí están mis entidades:

 @Entity @Table(name = "organisation") public class OrganisationEntity { @Id @Column(name = "orga_id") @GeneratedValue(strategy = GenerationType.AUTO) private Long id; @NotNull private String name; // Getters & Setters }

-

 @Entity @Table(name = "\"user\"") public class UserEntity { @Id @Column(name = "user_id") @GeneratedValue(strategy = GenerationType.AUTO) private Long id; @NotNull private String email; @NotNull private String firstName; @NotNull private String lastName; @NotNull private String password; @ManyToOne(targetEntity = OrganisationEntity.class,cascade = CascadeType.ALL) @JoinColumn(name = "orga_id") private OrganisationEntity organisation; // Getters & Setters }

Aquí está mi problema, cuando a dos usuarios se les asigna una organización con el mismo nombre, dicha organización se crea dos veces en la tabla Organisation con 2 ID diferentes. Deseo asignar el ID de una organización a un nuevo usuario si ya existe.

Entonces, si los usuarios U1 y U2 se crean con una organización llamada O1, ambos deben tener el mismo orga_id y solo se debe crear una entrada de organización en la base de datos.

¿Cómo se puede lograr eso? ¿Y qué falta en mi comprensión de Hibernate ?

A pedido , aquí está mi servicio que crea la UserEntity al registrarse el usuario:

 @Override public UserInfo createUser(UserInfo newUser) { return mapper.map(userDao.save(mapper.map(newUser))); }

Mapeo el objeto con Mapstruct a una UserEntity y lo envío a mi DAO para guardarlo en mi base de datos.

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Asegúrese de no asignar una nueva instancia de Organisation cada vez que se cree un nuevo usuario, sino que primero consulte la base de datos para una organización existente por nombre y reutilice la entidad resultante para todos los usuarios relacionados si ya está allí. .

Además, en aras de la corrección, considere agregar una restricción UNIQUE a la columna organisation.name .

over 4 years ago · Santiago Trujillo Denunciar

0

Dado que no desea organizaciones diferentes para diferentes usuarios, es mejor eliminar @GeneratedValue(strategy = GenerationType.AUTO) del atributo Id de OrganisationEntity . Esto evitaría crear más entradas de Organización en la base de datos.

También obtenga primero el objeto OrganisationEntity y asígnelo a UserEntity

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda