Buang nilai saat memasukkan dan memperbarui data menggunakan slick

Saya menggunakan slick dengan play2. Saya memiliki beberapa bidang dalam database yang dikelola oleh database. Saya tidak ingin membuat atau memperbaruinya, namun saya ingin mendapatkannya sambil membaca nilainya.

Misalnya, saya punya

case class MappedDummyTable(id: Int, .. 20 other fields, modified_time: Optional[Timestamp])

yang memetakan Dummy dalam database. modified_time dikelola oleh database.

Masalahnya adalah selama insert atau update, saya membuat instance MappedDummyTable tanpa atribut waktu yang dimodifikasi dan meneruskannya ke apik untuk membuat/memperbarui seperti

TableQuery[MappedDummyTable].insert(instanceOfMappedDummyTable)

Untuk ini, Slick membuat kueri sebagai


Insert INTO MappedDummyTable(id,....,modified_time) Values(1,....,null)

dan memperbarui waktu_modifikasi sebagai NULL, yang tidak saya inginkan. Saya ingin Slick mengabaikan bidang saat memperbarui dan membuat.

Untuk update, saya bisa melakukannya

TableQuery[MappedDummyTable].map(fieldsToBeUpdated).update(values)

tapi ini menyebabkan 20 bidang ganjil dalam metode map yang terlihat jelek.

Apakah ada cara yang lebih baik?

Memperbarui:

Solusi terbaik yang saya temukan adalah menggunakan banyak proyeksi. Saya membuat satu proyeksi untuk mendapatkan nilai dan proyeksi lainnya untuk memperbarui dan memasukkan data


person mohit    schedule 13.11.2014    source sumber


Jawaban (2)


mungkin Anda perlu menulis beberapa pemicu di tabel jika Anda tidak ingin menulis kode seperti row => (row.id,...other 20 fields)

atau coba gunakan None daripada null?

person fairjm    schedule 05.12.2014
comment
Tidak ada yang dikonversi menjadi nol dengan apik - person mohit; 07.12.2014

Saya percaya bahwa solusi dengan pemetaan bidang non-default adalah satu-satunya cara untuk melakukannya dengan Slick. Untuk membuatnya tidak terlalu jelek, Anda dapat mendefinisikan fungsi abaikanDefaults pada MappedDummyTable yang hanya akan mengembalikan nilai dan fungsi non default di objek pendamping ke kelas kasus MappedDummyTable yang mengembalikan proyeksi

TableQuery[MappedDummyTable].map(MappedDummyTable.ignoreDefaults).insert(instanceOfMappedDummyTable.ignoreDefaults)
person Gennadiy    schedule 07.12.2014
comment
Bisakah Anda memberi contoh? Saya memiliki beberapa kolom dengan nilai default. Ketika saya memberikan beberapa nilai untuk itu, apakah nilai tersebut akan diabaikan? - person mohit; 07.12.2014