Posted on 2007-10-09 12:57
Stanley Sun 閱讀(310)
評論(0) 編輯 收藏
在一般的項目中,數據庫主鍵不會擁有業務邏輯。但是在一些數據庫設計不是很嚴格的項目中還是會把擁護業務邏輯的字段作為主鍵使用,而且可能回事復合主鍵。
現在在一個項目我就遇到這情況。這個項目的數據訪問框架使用的Hibernate框架,在對復合主鍵的映射是我遇到了一個Hibernate
Bug。我使用的數據庫是Oracle 8i。Hibernate Mapping如下:
<composite-id name="id" class="InfoViewDetaillistId">
<key-property
name="accountno"
column="ACCOUNTNO"
type="string"
/>
<key-property
name="rlsdepid"
column="RLSDEPID"
type="string"
/>
<key-property
name="sequenceno"
column="SEQUENCENO"
type="integer"
/>
<key-property
name="ondate"
column="ONDATE"
type="date"
/>
</composite-id>
在這個復合主鍵中包括了四個擁有業務邏輯的字段,分別是帳號,中心號,序號,日期。問題就在Hibernate對日期類型的映射上,如使用上面的配置方法的話Hibernate在啟動的時候就會報錯。具體的解決方法是把
<key-property
name="ondate"
column="ONDATE"
type="date"
/>
替換成
<key-property name="ondate"
type="date">
<column
name="ONDATE" not-null="true"
sql-type="java.sql.Types.DATE"/>
</key-property>
Bug具體的原因我會在一會的文章中解釋。