Meine Datenbank besteht aus zwei Tabellen: Organisation
und User
, in einer ManyToOne
Beziehung, wo eine Organisation viele Benutzer halten kann.Foreign Key Sharing im Hibernate
Bevor ich mein Problem teilen, hier sind meine Einheiten:
@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
}
Hier mein Problem ist, wenn zwei Benutzer eine Organisation mit dem Namen gleichen zugeordnet sind, wobei Organisation wird zweimal in der Organisation
Tabelle mit 2 verschiedenen IDs erstellt. Ich möchte die ID eines Unternehmens einem neuen Benutzer zuweisen, wenn es bereits existiert.
Wenn Benutzer U1 & U2 mit einer Organisation namens O1 erstellt werden, sollten beide die gleiche orga_id
haben und nur ein Organisationseintrag in der Datenbank erstellt werden.
Wie kann das erreicht werden? Und was fehlt in meinem Verständnis von Hibernate
?
Auf Anfrage, hier ist mein Dienst, der die UserEntity
bei der Benutzerregistrierung erstellt:
@Override
public UserInfo createUser(UserInfo newUser) {
return mapper.map(userDao.save(mapper.map(newUser)));
}
ich mit Mapstruct
zu einem UserEntity
und senden Sie es an meine DAO
, um sie zu speichern Karte das Objekt in meinem Datenbank.
Könnten Sie bitte nach dem Code, die/Updates und Einrichtungen schafft? –
Ich habe meinen Service hinzugefügt, bitte lassen Sie mich wissen, wenn das nicht genug ist. – Christopher
Sie haben erwähnt, dass Sie einer Organisation zwei Benutzer mit dem gleichen Namen zuweisen, was mich zu der Annahme verleitet, dass Sie zwei Organisationsinstanzen erstellen, und Sie geben beide den gleichen Namen, der in keiner Weise den Ruhezustand meldet dass sie tatsächlich die gleiche Organisation sind. Sie sollten 1 Organisation instanziieren und es beiden Benutzern zuweisen. Können Sie den Code veröffentlichen, in dem Sie die OrganizationEntity und die UserEntity erstellen? –