Do użycia ORM-a przekonał mnie znajomy. W założeniu: super. Nie będę się rozpisywał czym jest ORM i jakie funkcjonalności ma spełniać – na pewno jest to wielokrotnie opisane przez bardziej kompetentnych w tym zakresie ludzi. Dość powiedzieć, że dzięki temu korzystam z natywnych klas reprezentujących dane, np.:
class PostData { @Generated @Id int id; Post post; string title; string markdown; string excerpt; Nullable!string gpg; DateTime timestamp; @ManyToMany Tag[] tags; } |
Pobieżne sprawdzenie dostępnych bibliotek w D zaowocowało znalezieniem hibernated. Niestety, cechują go przypadłości jednoosobowego projektu open-source (które zapewne będą w przyszłości równie prawdziwe skierowane ku Pierunowi):
Dokumentacja jest słaba. Readme ze strony głównej się nie kompilował, a po poprawkach zapewniających kompilację nie przechodził własnych assertów. Niezrażony początkowymi trudnościami, naprawiłem je (w trakcie pisania tego tekstu PR wciąż wisi, ciekawe czy i kiedy będzie jakakolwiek odpowiedź), i rozpocząłem implementację bloga.
Niestety, następnym problemem, na który natrafiłem jest niedziałająca adnotacja @ManyToMany. Pomimo kilku dni intensywnej męki nie byłem w stanie jej naprawić. Przyczyną głównie jest nieznajomość projektu, słaba znajomość języka i, być może, średnia jakość kodu. Jak widać, informacja o błędzie jest na GitHubie już od kilku miesięcy, ale nistety poprawek nie ma.
Dziwnym zbiegiem okoliczności, gdy już miałem się poddać i wrócić do oryginalnego planu (operowanie bezpośrednio na PGSQL), odkryłem obejście mojego problemu: użycie LazyCollection!T zamiast T[] dla pól połączonych @ManyToMany.