Nach längerer Pause wird nun ein weiteres neues Plugin für die sQLshell veröffentlicht. Ich beschäftigte mich mit JPA und suchte nach einer Methode, Entities für ein bestehendes Schema zu erzeugen.
Ausgehend von einem Repository auf GitHub wollte ich ein wenig mit JPA herumspielen. Selber Entities zu schreiben war mir aber zu aufwendig - zumal es nicht nur meine eigenen Beispieldatenbanken zum Test neuer Features der sQLshell gibt, sondern fast jeder Hersteller inzwischen solche Beispiele anbietet. Ich entschied mich - auch weil ich testen wollte, wie plattformunabhängig/plattformübergreifend JPA wirklich funktioniert - für zwei Beispieldatenbanken von Herstellern: chinook von SQLite und BikeStores von MSSQL Server (Anweisungen zum Import hier, weitere Beispiele zum Beispiel hier ).
Ich wollte nicht bei Null anfangen und fand ein Repository, auf das ich mit meinen Experimenten aufbauen wollte - allerdings ging das schief: Erstens war das Repository ein wenig veraltet (Hibernate-Version 3.5) und zweitens fand ich noch einige Ungereimtheiten, die ich zunächst fixen musste bevor ich daran denken konnte mit Tests zu beginnen. Ich entschied mich daher, das Repository nicht zu klonen, sondern durch es inspiriert nochmals auf der grünen Wiese zu beginnen.
Meine Versuche, ein Projekt oder Werkzeug zu finden, das mir für ein bestehendes Schema die entsprechenden Entity-Klassen generieren würde schlugen ebenfalls fehl. Sicher - es gibt diverse Projekte, die von sich behaipten, genau das zu können. Allerdings stellte sich bereits bei den nicht sehr großen Modellen die ich zum Test benutzte heraus, dass diese Werkzeuge versagten - nicht nur Third-Party-Versuche wie jpa-entity-generator, sondern sogar hibernate-tools.
Als ich an dem Punkt angekommen war überlegte ich, dass ich ja die Infrastruktur besitze, solche Funktionalität selber zu schaffen - ich hatte für die sQLshell bereits Plugins geschaffen, die HTML-Dokumentation ausgehend von einer Tabelle für ein ganzes Schema erstellten.
Wenn ich auf derselben Grundlage statt HTML Java-Quelltest erzeugen würde, müsste ein Plugin zur Erzeugung von Entity-Klassen eigentlich machbar sein. Ich definierte noch schnell meine Anforderungen an ein solches Projekt:
Im Projekt jpa-sQLshell-tests kann man den aktuellen Stand einsehen. Derzeit habe ich ein Modell gefunden, das ohne Nacharbeit nicht kompilierfähig ist - daran arbeite ich gerade. Der nächste Schritt ist, für jedes der Modelle entsprechende Tests zu implementieren, die die einzelnen Features (Relationships) prüfen.
Hier noch einige Links, die ich während des Prozesses interessant fand:
Xiermires/EntityMatcher
JPA count NamedQuery
JPA Named Queries
Index Definition
@UniqueConstraint annotation in Java
JPA - Applying Unique Constraints by using @Column#unique
JPA - Applying Unique Constraints by using @Table#uniqueConstrains
Hibernate does not create foreign key constraint
Access a database with JPA and Hibernate
Tutorial: Java Persistence API (JPA)
Access a database with JPA and Hibernate | Micronaut Guides | Micronaut Framework
Inheritance Strategies with JPA and Hibernate – The Complete Guide
Hibernate Inheritance Mapping
Java Persistence/Inheritance
Vererbung Strategien
The best way to use entity inheritance with JPA and Hibernate
JPA Hibernate - Entity Inheritance
JPA - Single Table Inheritance Strategy
JPA: difference between @JoinColumn and @PrimaryKeyJoinColumn?
Java - JPA - @Version annotation
How does the entity version property work when using JPA and Hibernate
Optimistic Locking in JPA
05.04.2022
Ich habe bereits darüber berichtet, dass die sQLshell ein neues Plugin anbietet, das aus bestehenden Datenmodellen in Datenbanken JPA-Entityklassen generieren kann.
16.01.2021
Ich habe nach meinem letzten neuen Plugin für die sQLshell bereits wieder ein neues im Angebot - dieses Mal im Bereich Reporting
03.01.2021
Eine neue Version der sQLshell ist verfügbar!
Multi-User-WebDAV, Docker, GitHub
17.11.2019
Nachdem ich mich in letzter Zeit verstärkt mit Docker und dem zugehörigen Ökosystem beschäftige, habe ich begonnen, verschiedenste Dienste in Containern zu testen um zu sehen, ob in manchen Fällen LXC oder KVM nicht doch die bessere Wahl wäre...
Weiterlesen...Android Basteln C und C++ Chaos Datenbanken Docker dWb+ ESP Wifi Garten Geo Go GUI Gui Hardware Java Jupyter Komponenten Links Linux Markdown Markup Music Numerik OpenSource PKI-X.509-CA Python QBrowser Rants Raspi Revisited Security Software-Test sQLshell TeleGrafana Verschiedenes Video Virtualisierung Windows Upcoming...
In eigener Sache...
Weiterlesen...Ich habe eine neue Java Swing Komponente erstellt: Es handelt sich um einen Wrapper für von JToolBar abgeleitete Klassen, die die Werkzeugleiste minimieren und sie nur dann einblenden, wenn der Mauszeiger über ihnen schwebt.
Weiterlesen...Ich habe bereits in einem früheren Artikel über meine ersten Erfolge berichtet, der sQLshell auf Basis des bestehenden Codes aus dem Projekt EBMap4D eine bessere Integration für Geo-Daten zu spendieren und entsprechende Abfragen, bzw. deren Ergebnisse auf einer Kartenansicht zu visualisieren.
Weiterlesen...Manche nennen es Blog, manche Web-Seite - ich schreibe hier hin und wieder über meine Erlebnisse, Rückschläge und Erleuchtungen bei meinen Hobbies.
Wer daran teilhaben und eventuell sogar davon profitieren möchte, muss damit leben, daß ich hin und wieder kleine Ausflüge in Bereiche mache, die nichts mit IT, Administration oder Softwareentwicklung zu tun haben.
Ich wünsche allen Lesern viel Spaß und hin und wieder einen kleinen AHA!-Effekt...
PS: Meine öffentlichen Codeberg-Repositories findet man hier.