Masalah pribadi saya "yang sering dijelaskan":
Anti-Pola
Bergaul dengan benda-benda terpisah (SaveOrUpdate atau Gabung ditambah beberapa kode berantakan) daripada menggunakan DTO. Semakin kompleks entitasnya, semakin berantakan kodenya. (Ini juga berarti bahwa ia bekerja dengan sangat baik dengan entitas sepele.) Ayende juga menyebutnya Pola Stripper dan menjelaskan masalah enkapsulasi.
Ketidaktahuan memahami ketidaktahuan dan menulis aplikasi NH seperti ketika menggunakan SQL eksplisit. Gejala dari itu: memanggil Pembaruan setelah mengubah objek, bertanya-tanya mengapa perubahan tetap ada bahkan jika Pembaruan belum dipanggil, bertanya-tanya bagaimana cara menghindari perubahan yang harus dipertahankan.
Tidak memahami transaksi dan pola unit kerja . Anti-pola yang sering: transaksi implisit, sesi-per-operasi dan sesi-per-aplikasi. Beberapa bacaan lagi:
Menggunakan acara NH untuk memasukkan logika aplikasi (mis. Ubah pelacakan di sisipkan dan perbarui pemicu)
Buat satu kelas per tabel . Beberapa orang tidak mengerti OOD, yang lain tidak mengerti desain relasional.
Kesalahan
penggunaan satu-ke-satu, bukan banyak-ke-satu. Saya mencoba menjelaskannya dalam jawaban ini .
Menggunakan join fetch dalam kombinasi dengan SetMaxResult. Jawaban terakhir saya terkait dengan topik itu:
Menulis entitas yang berubah sendiri . Ketika suatu entitas tidak secara tepat mengembalikan nilai yang telah ditetapkan oleh NH, itu dianggap kotor dan diperbarui di setiap sesi. Misalnya: mengganti koleksi persisten NH di setter properti.
IList<Address> Addresses
{
get { return addresses; }
// will cause the addresses collection to be built up from scratch
// in the database in every session, even when just reading the entity.
set { addresses = new List<Address>(value); }
}
int Whatever
{
// will make the entity dirty after reading negative values from the db.
// this causes unexpected updates after just reading the entity.
get { if (whatever < 0) return 0; }
set { whatever = value; }
}
Mungkin lebih banyak yang mengikuti.