Konvertierung vom Java-Modell in JPAJava

Java-Forum
Anonymous
 Konvertierung vom Java-Modell in JPA

Post by Anonymous »

Ich habe eine Klasse „Benutzer“ implementiert, die einen Benutzer darstellt (bisher entweder einen Schüler oder einen Lehrer). Gemeinsam ist ihnen, dass sie beide IDs und einige Informationen über den Benutzer haben (diese werden in einer zusammengesetzten Klasse „UserInformation“ gespeichert). So sah die Klasse User vorher aus:

Code: Select all

public abstract class User {
private UUID id;
private UserInformation info;

public User(String surname, String name, String email) {
this.info = new UserInformation(surname, name, email);
this.id = UUID.randomUUID();
}

public UUID getId() {
return this.id;
}

public UserInformation getInfo() {
return this.info;
}
}
Ich wollte mich dann mit H2-In-Memory-Datenbanken in Spring Boot befassen und fand heraus, dass ich die Annotation @Id verwenden kann, um den Primärschlüssel des Benutzers darzustellen. Ich habe auch herausgefunden, dass ich die Annotation @GeneratedValue verwenden kann, die eine ID für mich generieren würde.
Ich habe daher meinen Code entsprechend geändert:

Code: Select all

@MappedSuperclass
public abstract class User {
@Id
@GeneratedValue(strategy = GenerationType.UUID)
private UUID id;
@Embedded private UserInformation info;

public User(String surname, String name, String email) {
this.info = new UserInformation(surname, name, email);
}

protected User() {

}

public UUID getId() {
return this.id;
}

public UserInformation getInfo() {
return this.info;
}
}
Nach dieser Änderung kann ich jedoch nicht mehr über den einfachen getId-Aufruf auf Id zugreifen. Ich habe bereits viel um diese getId-Funktionalität herum aufgebaut. Sogar in einigen meiner benutzerdefinierten Ausnahmen verweise ich auf bestimmte Objekte basierend auf ihrer ID, wie zum Beispiel in dieser GradeOutOfBoundsException:

Code: Select all

public class GradeOutOfBoundsException extends Exception {

GradeOutOfBoundsException(int valueOfGrade, UUID studentId, String assignmentName) {
super( "Value:" + valueOfGrade + " out of 0-100 bounds assigned for student with id: " + studentId + " in module " + assignmentName); }
}
Ich habe jetzt ein paar Ideen, wie das behoben werden könnte
  • Behalten Sie die explizite Initialisierung von id bei, indem Sie UUID.randomUUID() verwenden. Dies würde wahrscheinlich funktionieren, aber ich würde stattdessen lieber die Annotation @GeneratedValue verwenden.
  • Verwenden Sie keine IDs mehr im Code und verwenden Sie stattdessen andere Bezeichner der Objekte wie den Nachnamen eines Benutzers.
Was ist die beste Vorgehensweise, um dieses Problem zu beheben?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post