Hallo,
vorweg: Von Hibernate habe ich noch nicht viel Ahnung, arbeite mich aber gerade ein. Bei der Umgebung handelt es sich nicht um eine Anwendung in einem EJB-Container, sondern um eine Java SE Anwendung.
Eines unserer Produkte besitzt eine hässliche DB-Tabelle. Sie besteht aus >450 Spalten. Je nach Standort enthält die Tabelle zwischen 1.000 und 50.000 Einträgen. Die Datenbankstruktur inkompatibel zu ändern ist leider derzeit keine Option.
Die Tabelle mit Hibernate zu Objekten zu mappen stellt kein Problem dar. Für die meisten Anwendungsfälle gibt es kein Problem, die >450 Eigenschaften im Objekt zu halten.
Allerdings existiert eine Swing-GUI. Diese stellt einen Selektor-Dialog zur Verfügung, der alle Einträge gleichzeitig in einer JTable darstellt. Die GUI-Tabelle dient ausschließlich der Darstellung (read only). Die Spaltenauswahl wird vom Benutzer (pre fetch) dynamisch getroffen. Der Benutzer kann nie mehr als 20 Spalten auswählen. Auf Knopfdruck wird ein TableModel mit den geladenen Attributen befüllt. All das funktioniert derzeit mit JDBC wunderprächtig.
Die Zeilen vollständig (alle Zeilen × Spalten) von der Datenbank zu holen fällt aus. Mit JDBC komme ich da schnell auf über 500MB Speicherverbrauch in der Anwendung, was für diverse Kunden untragbar ist. Die Daten seitenweise von der Datenbank zu holen, ist auch keine Lösung.
Wie bildet man das ganze nun mit/gegen Hibernate ab? Da der Benutzer die Spalten vollkommen frei wählt, erscheint mir dieser Ansatz praktikabel: Die Daten werden einfach per HQL Projection von der Datenbank geholt. Typbindung fällt in der dynamischen GUI-Tabelle ja ohnehin flach.
Gibt es dazu bessere Ansätze? Vielen Dank für Eure Vorschläge!
Ebenius
vorweg: Von Hibernate habe ich noch nicht viel Ahnung, arbeite mich aber gerade ein. Bei der Umgebung handelt es sich nicht um eine Anwendung in einem EJB-Container, sondern um eine Java SE Anwendung.
Eines unserer Produkte besitzt eine hässliche DB-Tabelle. Sie besteht aus >450 Spalten. Je nach Standort enthält die Tabelle zwischen 1.000 und 50.000 Einträgen. Die Datenbankstruktur inkompatibel zu ändern ist leider derzeit keine Option.
Die Tabelle mit Hibernate zu Objekten zu mappen stellt kein Problem dar. Für die meisten Anwendungsfälle gibt es kein Problem, die >450 Eigenschaften im Objekt zu halten.
Allerdings existiert eine Swing-GUI. Diese stellt einen Selektor-Dialog zur Verfügung, der alle Einträge gleichzeitig in einer JTable darstellt. Die GUI-Tabelle dient ausschließlich der Darstellung (read only). Die Spaltenauswahl wird vom Benutzer (pre fetch) dynamisch getroffen. Der Benutzer kann nie mehr als 20 Spalten auswählen. Auf Knopfdruck wird ein TableModel mit den geladenen Attributen befüllt. All das funktioniert derzeit mit JDBC wunderprächtig.
Die Zeilen vollständig (alle Zeilen × Spalten) von der Datenbank zu holen fällt aus. Mit JDBC komme ich da schnell auf über 500MB Speicherverbrauch in der Anwendung, was für diverse Kunden untragbar ist. Die Daten seitenweise von der Datenbank zu holen, ist auch keine Lösung.
Wie bildet man das ganze nun mit/gegen Hibernate ab? Da der Benutzer die Spalten vollkommen frei wählt, erscheint mir dieser Ansatz praktikabel: Die Daten werden einfach per HQL Projection von der Datenbank geholt. Typbindung fällt in der dynamischen GUI-Tabelle ja ohnehin flach.
Gibt es dazu bessere Ansätze? Vielen Dank für Eure Vorschläge!
Ebenius