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をご覧ください。
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!!