Posted on 2007-10-09 12:57 
Stanley Sun 阅读(319) 
评论(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具体的原因我会在一会的文章中解释。