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!
Testdatengeneratoren als Microservices mit Docker
02.11.2019
Ich habe die verschiedenen Testdatengeneratoren mittels Microservices über HTTP zugänglich gemacht, um sie unabhängig von der verwendeten Programmiersprache und/ oder Version (Java 11) verwenden zu können.
Weiterlesen...Android Basteln C und C++ Chaos Datenbanken Docker dWb+ ESP Wifi Garten Geo Git(lab|hub) Go GUI Gui Hardware Java Jupyter Komponenten Links Linux Markdown Markup Music Numerik PKI-X.509-CA Python QBrowser Rants Raspi Revisited Security Software-Test sQLshell TeleGrafana Verschiedenes Video Virtualisierung Windows Upcoming...
Nachdem es nun bereits seit einiger Zeit ein wenig stiller um meine diversen Generatoren für Testdaten geworden ist, habe ich über den Feiertag in Thüringen einen neuen begonnen.
Weiterlesen...Ich wurde über einen Post auf Mastodon auf ein Projekt aufmerksam, das mir so interessant erschien, dass ich daraus meine neueste Fingerübung machte...
Weiterlesen...Eine neue Version der sQLshell ist verfügbar!
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, muß 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 GitHub-Repositories findet man hier - meine öffentlichen GitLab-Repositories finden sich dagegen hier.