2016-05-21 6 views
2

私はSlickで少し苦労しています。私は最近のScala/Slickアダプターです。私はHibernateやRails ActiveRecordに慣れていますが、たくさんのテーブルに参加するのは少し難しいです。スリックをどう思う?

私は以下のクラスパターンを持っています。

case class User(id: UUID, ..., profile: UserProfile) 
case class UserProfile(id: UUID, ..., address: Address) 
case class Address(id: UUID, ...) 

私はドメインモデルとしてこれを持ってしようとすると、永続層がちょうどドメイン単一のオブジェクトを返すために、テーブルを取得し、参加したんです。

  1. 滑らかに行うのが正しい方法ですか?
  2. データベースに絶えずクエリするのではなく、クエリ結果をキャッシュすることはありますか?
  3. Libは役に立ちますか?
  4. これらの3つのテーブルを結合する最良の方法は何ですか? 1別々のDAOまたは内部結合を介してそれぞれにクエリを行い、ScalaのgroupByを使用しますか?

ご迷惑をおかけして申し訳ございません。私はちょうど "スリックを考えて"どのように把握しようとしています。

答えて

0

私は少し前にplay + slickに関する小さなチュートリアルを書きました。それをチェックし、それは私が通常持っているhttp://pedrorijo.com/blog/play-slick/

に役立ちますかどうかを確認:

case class CaseClassA(field1, field2, caseClassB_Id) 
case class CaseClassB(field3, field4) 

多分より良いアプローチ

+0

私のドメインクラスにはIDを持たせたくありません。私はHibernate Styleをやろうとしています。 – Driver

+0

はい、HibernateはORMですが、 'SlickはScala用の最新のデータベースクエリとアクセスライブラリです' ..まだ誰かが滑らかなケースで他のドメインクラスを参照するより良いアプローチを提案できるクラス、私は知って満足しているだろう – pedrorijo91

+0

[OK]を確認します。とった。もう1つ。これらのテーブルを結合する最良の方法は何ですか。複数のクエリ、またはテーブルとメモリ内のgroupByの結合? – Driver

2
  1. がありますそれを行うのない正しい方法はありません。それはあなたがあなたのモデルで何をする必要があるかによって異なります...リレーショナルデータベースモデルをモデル化する正しい方法がありますが、あなたはすでにそれを知っています。
  2. Slickはキャッシュを使用しません。hereを参照してください。しかし、たとえばPlay Frameworkを使用している場合は、CacheApiが提供されていますが、そのための経験やアドバイスはありません。しかし、クエリの場合、「キャッシング」を行うことができます(compiled queriesなど)。
  3. おそらく、シンプルなケース、シンプルなテーブルなどの場合はそうかもしれませんが、Hibernateを使用することもできます。
  4. 私はScala/Slickの初心者のときにも悩んでいましたので、そのことについてblogと書いています(それはSlickの3rd party docsでもありますが、私は自慢しています:p)。そのための簡単なコンパニオンプロジェクトもあります。

Slickを使用すると、プレーンSQLを理解すると、結合などが多く役立ちます。 たとえば、外部結合(左/右)順序が重要であり、その他の興味深い質問があります。

+0

私が達成しようとしているのは、私が開発したすべてのAppsでこれを行うのです。私は、私がBusines/Domain Modelsにとらわれないドメイン層を持っていて、DAOやRepo Interfacesはデータアクセス層データベースと一緒に – Driver

+0

それは問題ではないはずです。あなたは単にサービス(Busines/Domain層)にDAOを注入するだけです。しかしそれはスリック自身をそれほど考慮しない別の質問です。また、ファイルで分割されたSlickテーブルがある場合は、このPlaySlick [例](https)のように、Scalaのセルフタイプを使用してDAOからドライバを注入することができます(MySQLからH2へ) ://github.com/playframework/play-slick/blob/master/samples/computer-database/app/dao/CompaniesDAO.scala)。 –

関連する問題