Thursday, April 21, 2005
OR Mapper Castor
Beberapa hari lepas kena gigit dgn bug Castor.
Ia berlaku apabila saya menggunakan field double kat mysql. Field tersebut kadang kala mempunyai nilai field yg mana, apabila diload ke dlm Java, mempunyai sedikit perbezaan. Ini akibat precision utk double yg lari sikit aje, tapi menyebabkan Castor beranggapan, nilai di db dah berubah walhal ia dah lock row tu. Ini berlaku semasa update. Kita retrieve row dpd db dan masukkan ke dlm object. Apabila update, Castor akan check dulu nilai asal yg diambil dpd db tu masih sama dgn nilai dlm db, sebelum melakukan update. Tapi, utk field jenis double ni, nilai asal (snapshot) yg disimpan oleh Castor sendiri dah berbeza dgn dlm db akibat precision utk field double, menyebabkan Castor throw Exception dan merajuk, tak mau update field tersebut.
Satu cara utk mengatasi masalah ini ialah dgn declare field double tersebut sebagai read dirty = true. Cthnya daripada:
<sql name="price" type="double"></sql>
kepada:
<sql name="price" type="double" dirty="ignore"></sql>
Macam2
The Java Language Specification, Third Edition. Buku dlm format pdf, free, dpd sumber java.
Five Favorite Features from 5.0
Hibernate: Custom Collection Types
Object Caching with AOP
Beberapa hari lepas kena gigit dgn bug Castor.
Ia berlaku apabila saya menggunakan field double kat mysql. Field tersebut kadang kala mempunyai nilai field yg mana, apabila diload ke dlm Java, mempunyai sedikit perbezaan. Ini akibat precision utk double yg lari sikit aje, tapi menyebabkan Castor beranggapan, nilai di db dah berubah walhal ia dah lock row tu. Ini berlaku semasa update. Kita retrieve row dpd db dan masukkan ke dlm object. Apabila update, Castor akan check dulu nilai asal yg diambil dpd db tu masih sama dgn nilai dlm db, sebelum melakukan update. Tapi, utk field jenis double ni, nilai asal (snapshot) yg disimpan oleh Castor sendiri dah berbeza dgn dlm db akibat precision utk field double, menyebabkan Castor throw Exception dan merajuk, tak mau update field tersebut.
Satu cara utk mengatasi masalah ini ialah dgn declare field double tersebut sebagai read dirty = true. Cthnya daripada:
<sql name="price" type="double"></sql>
kepada:
<sql name="price" type="double" dirty="ignore"></sql>
Macam2
The Java Language Specification, Third Edition. Buku dlm format pdf, free, dpd sumber java.
Five Favorite Features from 5.0
Hibernate: Custom Collection Types
Object Caching with AOP
Comments:
Post a Comment