2014-07-13 15 views
5

Tôi đang sử dụng Scala 2.11, Slick 2.1.0-M2, PlayFramework 2.3.1.Bảng bản đồ với hơn 22 cột đối với lớp chữ Scala của Slick 2.1.0

Tôi cần ánh xạ 25 cột bảng vào lớp chữ của Scala.

Ví dụ tôi có lớp trường hợp này:

case class Test(f1: Long, f2: String, f3: String, f4: String, f5: String, 
       f6: String, f7: String, f8: String, f9: String, f10: String, 
       f11: String, f12: String, f13: String, f14: String, f15: String, 
       f16: String, f17: String, f18: String, f19: String, f20: String, 
       f21: String, f22: String, f23: Float, f24: Float, f25: String) 

Tôi đọc mà người ta có thể viết tùy chỉnh Shape (proof), nhưng mọi nỗ lực của tôi để nhận ra nó là thất bại.

Vui lòng giúp tôi ánh xạ lớp chữ hoa này thành bảng.

+0

Bản sao của https://stackoverflow.com/questions/19636611/how-can-i-handle-a-22-column-table-with-slick-using-nested-tuples-or-hlists –

+0

Nó không trùng lặp , bởi vì không có gì về 'Hình dạng' ở đó. – Lunigorn

+2

Không trùng lặp vì câu hỏi này yêu cầu các lớp chữ thường> 22 cột, là một tính năng mới trong Scala 2.11. – cvogt

Trả lời

0

Không có giải pháp tốt cho câu hỏi này cho phiên bản hiện tại. Bạn có thể đóng gói một số trường vào một lớp chữ hoa chữ thường.

Vui lòng tham khảo trường hợp kiểm tra này.

https://github.com/slick/slick/blob/2.1.0-RC1/slick-testkit/src/main/scala/com/typesafe/slick/testkit/tests/JdbcMapperTest.scala#L99

+0

Tôi thấy giải pháp này và tôi nghĩ rằng nó là rất xấu để duy trì. Tôi nghĩ việc thực hiện đặc điểm 'Shape' sẽ tốt hơn nhiều. Nhưng tôi không thể làm cho nó mạnh mẽ. – Lunigorn

0

Trên thực tế điều này có thể được thực hiện thông qua HList như thế này

def * = (col1 :: col2 :: .. :: HNil).shaped <> (
{ case x => new YYY(x(0), x(1), ..)}, 
{ x: YYY => Option(x.col1 :: x.col2 :: .. :: HNil)} 
) 

Tôi đã viết một macro để làm các bản đồ, bạn có thể có một cái nhìn tại này https://github.com/jilen/slickext

0

tôi có một HListCaseClassShape that works giống như CaseClassShape nhưng không có giới hạn 22 cột: here. Sau đó bạn có thể ánh xạ nó vào bảng của bạn như sau: def * = MyHListCaseClassShape(f1, f2, f3...) (xem ví dụ Pair * here). Không chắc chắn nếu nó sẽ làm việc với Slick 2 nhưng có thể có giá trị một shot.

Các vấn đề liên quan