Hibernate学习
单主键、没有外键的Hibernate配置实例
<hibernate-mapping>
<class name="com.pms.bean.base.BadCodeBean" table="tbNC">
<id name="badCode" column="NC_ID">
<generator class="assigned"/>
</id>
<property name="desc" type="string"column="NC_DESC"></property>
</class>
</hibernate-mapping>
单主键、有外键的Hibernate配置实例
<hibernate-mapping>
<class name="com.pms.bean.base.ProjectBean" table="tbProject">
<id name="prjname" column="PRJ_NAME" type="string">
<generator class="assigned"></generator>
</id>
<many-to-one name=”customerCode”
class=”com.pms.bean.base.CustomerBean” outer-join=”ture”
not-null=”true” lazy=”false”>
<column name=”PRJ_CU_CODE”></column>
</many-to-one>
</hibernate-mapping>
双主键、没有外键的Hibernate配置实例
<hibernate-mapping>
<class name="com.pms.bean.base.LocationBean" table="tbLocation">
<composite-id>
<key-property name="lgort" column="LO_LGORT" type="string">
<key-property name="werks" column="LO_WERKS" type="string">
</composite-id>
</class>
</hibernate-mapping>
双主键、有外键的Hibernate配置实例
<hibernate-mapping>
<class name="com.pms.bean.base.DepartNcBean" table="tbNCDept">
<composite-id>
<key-property name="ncBean" column="NCD_ID " lazy="false">
<key-property name="deptDialogBean" column="NCD_DeptID "
lazy="false">
</composite-id>
<many-to-one name=”badType” class=”com.pms.bean.base.BadTypeBean”
outer-join=”ture”
not-null=”true” lazy=”false”>
<column name=”NCD_BadTypeCode”></column>
</many-to-one>
</class>
</hibernate-mapping>
双主键中的两个主键都被作为外键被调用的Hibernate配置实例
详细举例讲解:例如工厂和生产调度员组合成双主键,现在有一个表里面有两个外键分
别是工厂和生产调度员。
<hibernate-mapping>
<class name="com.pms.bean.base.prd.MaterielBean" table="tbMateriel">
<id name="matnr" column="MA_MATNR" type="string" length="18">
<generator class="assigned"/>
</id>
<property name="color" column="MA_COLOR" length="50"/>
<property name="werks" type="string" column="MA_WERKS" length="4"
insert="false" update="false"/>
<many-to-one name="dispatcherBean"
class="com.pms.bean.base.prd.DispatcherBean"
outer-join="true" not-null="true" lazy="false">
<column name="MA_FEVOR"/>
<column name="MA_WERKS "/>
</many-to-one>
</class>
</hibernate-mapping>
hibernate里面设置id自动增加避免并发后果
PLSql增加如下代码:
create sequence SEQ_tbSChecking start with 100000 increment by 1
minvalue 1 nomaxvalue nocache nocycle noorder;
(hibernate)xml文件中更改为:
<id name="id" column="SC_ID" type="java.lang.Integer" >
<generator class="sequence">
<param name="sequence">SEQ_tbSChecking</param>
</generator>
</id>
@注解和XML 主键生成策略
@注解配置:
@Id //表示该列为主键
@GeneratedValue(strategy=GenerationType.AUTO) //主键类型,auto为自动增长
private Integer id;
1、GenerationType.AUTO 自动增长,根据底层数据库自动选择。
数据库支持自动增长类型,则为自动增长。
2、GenerationType.TABLE 使用指定的表来决定主键的取值,结合@TableGeneraors 使用。
@Id //表示该列为主键
@TableGeneraors(name="tb_cat_gen",allocationSize=1)
@GeneratedValue(strategy=GenerationType.AUTO) //主键类型,auto为自动增长
private Integer id;
3、GenerationType.SEQYEBCE 使用Sequence 来决定主键的取值,适合Oracle、DB2 等支
持Sequence 的数据库,一般结合@SequenceGenerator。
@Id //表示该列为主键
@SequenceGenerator(name="tb_cat_gen",allocationSize=1)
@GeneratedValue(strategy=GenerationType.AUTO) //主键类型,auto为自动增长
private Integer id;
注意:oracle 没有自动增长类型,只能使用Sequence
4、GenerationType.IDENTITY 支持DB2、mySQL、MS SQL Server、Sybase 与
HyperaonicSQL 数据库的identit 类型主键。
XML 配置: