G
Gelöschtes Mitglied 68249
Gast
Hi,
ich habe hier gerade geistig ein Problem mit meinem Konstrukt, dass ich aufgebaut habe und jetzt wirft mir JPA berechtigt Fehler vor, die ich aber gerne gelöst bekommen hätte.
Folgendes Szenario:
In Java:
Es gibt die Klasse WIndowsOs, die repräsentiert einen Host mit allen Attributen, die ich auf dieser Ebene brauche. Eines dieser Attribute ist die Entität Server, diese repräsentiert den Server, auf dem der Host läuft, diese ist aber quasi nur ein Kopf. Darunter befinden sich dann verschiedene Klassen von Servern mit ihren eigenen Java-Klassen, also virtuelle Server, Blade-Server, Rack-Server, Blade-Center. Diese haben aber alle eine Parent-Klasse "Server-Main" da drin sind solche Felder, wie Kommentar, Beschreibung, Betreiber, die einfach jede Art von Servern hat.
Auf der Datenbank habe ich folgendes Szenario:
Eine Tabelle für die WindowsOs, eine Tabelle für Server und jeweils eine Tabelle für jede Server-Klasse. Idee von mir war, dass ich bei den Serverklassen dann jeweils eine Tabelle habe, in der für jeden Datensatz nahezu alle Felder gefüllt sind und ich keinen Overhead von leeren Feldern habe, bzw. Spalten nicht irgendwelche Kryptischen Namen geben muss, damit ich eine Doppelverwendung benennen kann.
Im Code wollte ich jetzt folgendes haben:
Jetzt meckert JPA zurecht:
Wie kann ich das so umstrukturieren, dass es gehen würde.
Bzw. welche Informationen braucht ihr noch, um das Problem zu verstehen?
ich habe hier gerade geistig ein Problem mit meinem Konstrukt, dass ich aufgebaut habe und jetzt wirft mir JPA berechtigt Fehler vor, die ich aber gerne gelöst bekommen hätte.
Folgendes Szenario:
In Java:
Es gibt die Klasse WIndowsOs, die repräsentiert einen Host mit allen Attributen, die ich auf dieser Ebene brauche. Eines dieser Attribute ist die Entität Server, diese repräsentiert den Server, auf dem der Host läuft, diese ist aber quasi nur ein Kopf. Darunter befinden sich dann verschiedene Klassen von Servern mit ihren eigenen Java-Klassen, also virtuelle Server, Blade-Server, Rack-Server, Blade-Center. Diese haben aber alle eine Parent-Klasse "Server-Main" da drin sind solche Felder, wie Kommentar, Beschreibung, Betreiber, die einfach jede Art von Servern hat.
Auf der Datenbank habe ich folgendes Szenario:
Eine Tabelle für die WindowsOs, eine Tabelle für Server und jeweils eine Tabelle für jede Server-Klasse. Idee von mir war, dass ich bei den Serverklassen dann jeweils eine Tabelle habe, in der für jeden Datensatz nahezu alle Felder gefüllt sind und ich keinen Overhead von leeren Feldern habe, bzw. Spalten nicht irgendwelche Kryptischen Namen geben muss, damit ich eine Doppelverwendung benennen kann.
Im Code wollte ich jetzt folgendes haben:
Java:
@Entity
@Table
public class Server {
@Id
@Column(name = "UUID",length = 36)
private String pk;
@Column(name = "SERVER_TYPE",length = 100)
@Enumerated(EnumType.STRING)
private ServerType typ;
@OneToMany(mappedBy = "server")
private Set<? extends ServerMain> timeslices;
public ServerMain getCurrentServer() {
Optional<? extends ServerMain> current;
List<? extends ServerMain> tempList = new ArrayList<>(timeslices);
if(timeslices.size() == 1) {
return tempList.get(0);
}
Comparator<ServerMain> getActual;
getActual = new Comparator<ServerMain>() {
@Override
public int compare(ServerMain i1, ServerMain i2) {
if(i1.getValidDate().isAfter(LocalDateTime.now())) return -1;
if(i2.getValidDate().isAfter(LocalDateTime.now())) return 1;
if(i1.getValidDate().isAfter(i2.getValidDate())) return 1;
if(i2.getValidDate().isAfter(i1.getValidDate())) return -1;
return 0;
}
};
current = tempList.stream().max(getActual);
if(current.isPresent()) {
return current.get();
}
return null;
}
//GETTER und SETTER
}
Jetzt meckert JPA zurecht:
Code:
Beschreibung der Ausnahme: [class main.java.proips.persistence.entities.Server] verwendet eine Nicht-Entität [class main.java.proips.persistence.entities.pattern.ServerMain] als Zielentität im Beziehungsattribut [field timeslices].
Wie kann ich das so umstrukturieren, dass es gehen würde.
Bzw. welche Informationen braucht ihr noch, um das Problem zu verstehen?