1 hibernate配置
1.1 注解方式
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity //必须
@Table(name = "T_Sys_Role") //表名
public class RoleBean implements Serializable {
@Id //设置主键
@Column(name="role_id") //对应的列名,如果与数据库列名相同可以不写(数据库列名忽略大小写)
private String roleid;
@Column(name="role_name")
private String role_name;
private String role_remark;//与数据库列名相同
}
包不要导错
1.2 配置文件方式
<hibernate-mapping>
<class name="com.bean.UserBean" table="T_USERINFO" schema="***" catalog="***">
<id name="userid"type="java.lang.Integer">
<column name="USERID"/>
<generator class="identity"/>
</id>
<property name="username"type="java.lang.String">
<column name="USERNAME"length="100" />
</property>
</class>
</hibernate-mapping>
Name为bean名
table为表名
schema="YT"表示数据库的用户名。如果当前链接数据库的用户名称不是YT的话,实际操作中还是会用YT这个用户来操作。这就会产生一系列问题。
Catalog表示数据库名
2.id节点
1.column 字段名称
2.type 字段类型
3.length 字段长度
4.unsaved-value 用于判断对象值是否已经保存
5.generator-class 主键产生方式
assigned
hilo
seqhilo
increment
identity
sequence
native
uuid.hex
uuid.string
foreign
3.property 节点
1.column 数据库表字段名称
2.type 类型
3.length 长度
4.not-null 字段是否允许为空
5.unique 字段是否允许唯一(是否允许重复值)
6.insert insert操作时,是否允许包含本字段数值
7.update update操作时,是否包含本字段数据
1.3 主键生成策略
主键产生方式说明
increment(递增)
用于为long,short或者int类型生成唯一标识。只有在没有其他进程往同一张表中插入数据时才能使用。在集群下不要使用。
identity
对DB2,MySQL, MS SQL Server, Sybase和HypersonicSQL的内置标识字段提供支持。返回的标识符是long,short 或者int类型的。
sequence(序列)
在DB2,PostgreSQL,Oracle, SAP DB, McKoi中使用序列(sequence),而在Interbase中使用生成器(generator)。返回的标识符是long,short或者int类型的。
hilo(高低位)
使用一个高/低位算法来高效的生成long,short或者int类型的标识符。给定一个表和字段(默认分别是是hibernate_unique_key和next_hi)作为高位值得来源。高/低位算法生成的标识符只在一个特定的数据库中是唯一的。在使用JTA获得的连接或者用户自行提供的连接中,不要使用这种生成器。
seqhilo(使用序列的高低位)
使用一个高/低位算法来高效的生成long,short或者int类型的标识符,给定一个数据库序列(sequence)的名字。
uuid.hex
用一个128-bit的UUID算法生成字符串类型的标识符。在一个网络中唯一(使用了IP地址)。UUID被编码为一个32位16进制数字的字符串。
uuid.string
使用同样的UUID算法。UUID被编码为一个16个字符长的任意ASCII字符组成的字符串。不能使用在PostgreSQL数据库中
native(本地)
根据底层数据库的能力选择identity,sequence 或者hilo中的一个。
assigned(程序设置)
让应用程序在save()之前为对象分配一个标示符。
foreign(外部引用)
配置文件方式可直接在ID节点的generator-class 属性中更改
注解方式
1、native
Java代码
@GeneratedValue(generator= "paymentableGenerator")
@GenericGenerator(name= "paymentableGenerator", strategy = "native")
2、uuid
Java代码
@GeneratedValue(generator= "paymentableGenerator")
@GenericGenerator(name= "paymentableGenerator", strategy = "uuid")
3、hilo
Java代码
@GeneratedValue(generator= "paymentableGenerator")
@GenericGenerator(name= "paymentableGenerator", strategy = "hilo")
4、assigned
Java代码
@GeneratedValue(generator= "paymentableGenerator")
@GenericGenerator(name= "paymentableGenerator", strategy = "assigned")
5、identity
Java代码
@GeneratedValue(generator= "paymentableGenerator")
@GenericGenerator(name= "paymentableGenerator", strategy = "identity")
6、select
Java代码
@GeneratedValue(generator= "paymentableGenerator")
@GenericGenerator(name="select",strategy="select",
parameters = { @Parameter(name ="key", value = "idstoerung") })
7、sequence
Java代码
@GeneratedValue(generator= "paymentableGenerator")
@GenericGenerator(name= "paymentableGenerator", strategy = "sequence",
parameters = { @Parameter(name ="sequence", value = "seq_payablemoney") })
8、seqhilo
Java代码
@GeneratedValue(generator= "paymentableGenerator")
@GenericGenerator(name= "paymentableGenerator", strategy = "seqhilo",
parameters = { @Parameter(name ="max_lo", value = "5") })
9、increment
Java代码
@GeneratedValue(generator= "paymentableGenerator")
@GenericGenerator(name= "paymentableGenerator", strategy = "increment")
10、foreign
Java代码
@GeneratedValue(generator= "idGenerator")
@GenericGenerator(name= "idGenerator", strategy = "foreign",
parameters = { @Parameter(name ="property", value = "employee") })