ReladomoにEclipse Collectionsをサポートする変更をコントリビュートしました

Reladomoとはゴールドマン・サックス社がOSSとして公開しているJavaのORMで、型安全なクエリ言語やバイテンポラルデータモデルのサポートなど、エンタープライズグレードの機能を持つORMフレームワークです。

詳しくはこれらのスライドをご覧ください。

www.slideshare.net

www.slideshare.net

さて、こちらのReladomoですが、データベースから取得したコレクションを、同じくゴールドマンサック社が同社初のOSSとして公開したGS Collectionsに変換する機能をもともとサポートしていました。

ReladomoでGS Collectionsを使用するコード例
// select * from PERSON
PersonList people = PersonFinder.findMany(PersonFinder.all())

//苗字を取得
List<String> lastNames = 
        people.asGscList().collect(Person::getLastName);

//猫を飼っている飼い主を取得
List<Person> catOwner = 
        people.asGscList().select(person -> person.hasPet(PetType.CAT));

//PetTypeごとに飼い主をグルーピング
MutableListMultimap<PetType, Person> peopleByPetType = 
        people.asGscList().groupByEach(person -> person.getPets().asGscList().collect(Pet::getPetType));

しかし、ご存知の方もいるかもしれませんが、GS Collections自体は現在開発が終了しており、Eclipse Foundationへ移管されたEclipse Collectionsという新たなプロダクトとして生まれ変わっております。

Eclipse Collections - Features you want with the collections you need. (日本語ページ)

こちらのEclipse Collections、GS Collectionsと上位互換の機能を持つのですが、パッケージの構成が異なり、実態としては異なるライブラリ依存になります。ですので、これまでReladomoがサポートしているGS CollectionsをそのままEclipse Collectionsとして使用することはできませんでした。

今回の変更では、新たにEclipse CollectionsをサポートするAPI asEcList() を追加し、もともとのasGscList()がdeprecated(非推奨)となりました。本機能はReladomoの17.0.0より使用することが可能です。

これにより、Reladomoそのものが持つ強力なDBクエリー言語に加えて、DBから取得したコレクションをインメモリーで操作することもEclipse Collectionsの機能で扱うことができ、データ操作の選択肢の幅が広がります!

ReladomoでEclipse Collectionsを使用するコード例
// select * from PERSON
PersonList people = PersonFinder.findMany(PersonFinder.all())

//苗字を取得
List<String> lastNames = 
        people.asEcList().collect(Person::getLastName);

//猫を飼っている飼い主を取得
List<Person> catOwner = 
        people.asEcList().select(person -> person.hasPet(PetType.CAT));

//PetTypeごとに飼い主をグルーピング
MutableListMultimap<PetType, Person> peopleByPetType = 
        people.asEcList().groupByEach(person -> person.getPets().asGscList().collect(Pet::getPetType));

その他変更の詳細はこちらのPRをご覧ください。

github.com

Reladomoでは、1年後の2019年3月にはGS Collectionsのサポートは終了する予定です。ですのでReladomoとGS Collectionsを併せて使用している方は早めの移行をおすすめします。

移行ガイドはこちら。

reladomo/GSC_TO_EC_MIGRATION_GUIDE.md at master · goldmansachs/reladomo · GitHub

ReladomoとEclipse Collections、最強の組み合わせでぜひ楽しい開発をしてみてください。Enjoy Happy Development!!