Lift Mapper ile çoktan çoğa ilişki sorununu çözme konusunda bir similar question recently, and got a great reply sordum. ScalaQuery/SLICK documentation'a baktım ama bağlantı tablolarının yer aldığı kalıcı veri yaklaşımını belgelemiyor. Birisi SLICK kullanarak çoktan çoğa haritalamanın nasıl yapılacağını bilirse, paylaşabilmeniz harika olur.ScalaQuery veya SLICK ile bir bağlantı tablosunu kullanarak çoktan çoğa ilişkiyi nasıl sunabilirim?
Q
ScalaQuery veya SLICK ile bir bağlantı tablosunu kullanarak çoktan çoğa ilişkiyi nasıl sunabilirim?
16
A
cevap
23
This test (Stefan Zeiger tarafından oluşturulan) SLICK test paketi yenidir ve oldukça güzel soruya cevap verir:
def testManyToMany(): Unit = db withSession {
object A extends Table[(Int, String)]("a") {
def id = column[Int]("id", O.PrimaryKey)
def s = column[String]("s")
def * = id ~ s
def bs = AToB.filter(_.aId === id).flatMap(_.bFK)
}
object B extends Table[(Int, String)]("b") {
def id = column[Int]("id", O.PrimaryKey)
def s = column[String]("s")
def * = id ~ s
def as = AToB.filter(_.bId === id).flatMap(_.aFK)
}
object AToB extends Table[(Int, Int)]("a_to_b") {
def aId = column[Int]("a")
def bId = column[Int]("b")
def * = aId ~ bId
def aFK = foreignKey("a_fk", aId, A)(a => a.id)
def bFK = foreignKey("b_fk", bId, B)(b => b.id)
}
(A.ddl ++ B.ddl ++ AToB.ddl).create
A.insertAll(1 -> "a", 2 -> "b", 3 -> "c")
B.insertAll(1 -> "x", 2 -> "y", 3 -> "z")
AToB.insertAll(1 -> 1, 1 -> 2, 2 -> 2, 2 -> 3)
/*val q1 = for {
a <- A if a.id >= 2
aToB <- AToB if aToB.aId === a.id
b <- B if b.id === aToB.bId
} yield (a.s, b.s)*/
val q1 = for {
a <- A if a.id >= 2
b <- a.bs
} yield (a.s, b.s)
q1.foreach(x => println(" "+x))
assertEquals(Set(("b","y"), ("b","z")), q1.list.toSet)
}
Güncelleme:
Ben en iyi ne olacağını oldukça emin değilim Scala'da iş mantığını ve kalıcılığını entegre etmenin yolu (bu, OO veya FP'den daha fazlasıdır), yani I asked a new question about this. Umarım bu problemi merak eden başka birine yardım eder.
İlgili konular
- 1. PHP MYSQL çoktan çoğa ilişkiyi güncelleştirme
- 2. @WhereJoinTable ile Hibernate kullanarak çoktan çoğa ilişkiyi nasıl kalıcı hale getirebilirim?
- 3. Çoktan çoğa nasıl sorgulanır?
- 4. Veritabanı tasarımında çoktan çoğa ilişkisi
- 5. Çoktan çoğa eşleme tablosu
- 6. Çoktan çoğa sorgu jpql
- 7. Doctrine2 ile çoktan çoğa ilişkisi arama
- 8. ScalaQuery
- 9. MongoDB'de çoktan çoğa veya bire bir ilişki nasıl temsil edilir?
- 10. Symfony2 ile Doktrini kullanarak çoktan çoğa ilişkisi sorgula
- 11. RestKit çoktan çoğa eşleme nasıl yapılır?
- 12. Ek alanlar ile çoktan çoğa ilişkisi
- 13. Aynı tablo arasında çoktan çoğa silme
- 14. Entity Framework çoktan çoğa öznitelelik
- 15. Çoktan çoğa tablodaki kayıt silme
- 16. setPrimitiveValue: forKey: ve çoktan çoğa ilişkileri
- 17. MySQL, çoktan çoğa bağlantı tablosu için birincil anahtar gerektiriyor mu?
- 18. Entity Framework'de çoktan çoğa eşleme nasıl oluşturulur?
- 19. Çoktan çoğa sorgu kullanılarak SQL
- 20. Çoktan çoğa tabloya göre filtreleme
- 21. Scala Slick/ScalaQuery BigDecimal ondalık (10,0) nasıl ondalıklara izin verir?
- 22. Çoktan çoğa ilişki okumak ve yazmak
- 23. Fluent-NHibernate: Benzersiz bir contraint ile çoktan çoğa ilişkisi oluşturma
- 24. varlık çerçevesi pek çok ilişkiyi güncelleştirir: sanal veya değil
- 25. Django'dan "ekstra alanları" kullanarak fazla alanlarla çoktan çoğa ilişkilerini kullanma
- 26. django 1.4 Çoktan çoğa toplu ekleme
- 27. Çoktan çoğa ilişkideki satır sayısı (SQLAlchemy)
- 28. Varlık Çerçevesi'nde çoktan çoğa ilişkiyle ilgili hata
- 29. Django'da, çoktan çoğa ilgili bir sınıf alanına nasıl erişirsiniz?
- 30. ScalaQuery kullanarak disk belleği sorgusu nasıl yapılır?