1.指定主键后的映射文件:
<class name="javaBean对象" table="数据库中表名 " >
<id name="javaBean中使用的字段" type="java.lang.String">
<column name="表中字段" length="长度" />
<generator class="主键生成方式" />
</id>
<property name="firmTypeName" type="java.lang.String">
<column name="firm_typeName" length="20" not-null="true" />
</property>
</class>
2.没有指定主键,数据库中没有id字段的映射文件:
<class name=" javaBean对象" table="数据库中表名" >
<composite-id name="id" class="包含id的类名">
<key-property name="名称" type="java.lang.String">
<column name="名称" length="50" />
</key-property>
<key-property name="时间" type="java.sql.Timestamp">
<column name="时间" length="23" />
</key-property>
</composite-id>
</class>
3.没有指定主键,但数据库中存在id字段映射文件:
<class name="com.Test1" table="test1" >
<composite-id name="id" class="com.test.Test ">
<key-property name="id" type="java.lang.String">
<column name="id" length="32" />
</key-property>
<key-property name="name" type="java.lang.String">
<column name="name" length="20" />
</key-property>
</composite-id>
</class>
总结:如果没有在创建数据库中表的时候指定主键,则用hibernate映射时,会指定为联合主键,即方式2,方式3。当指定了主键后,即方式1。
在方式1中,主键的字段用<id></id>,加上主键的生成方式,例如:
<generator class="主键生成方式" />,其余属性用<property>。
而在方式2和方式3中(没有指定主键),用<composite-id name="id" class=" ">
包含表中的字段,字段用<key-property>。
另外,当数据库中没有指定主键的时候,可以在hibernate中利用指定主键,正常生成反向映射文件的方法,指定数据库中的一个字段为主键,可以重复。
这在数据库中,主键是不允许重复的。