Hibernate的id生成机制
下午学习的过程中遇到一个问题 很纠结……
代码写的没有错 也能运行就是插不到数据库里去,找了很多方法都不行!!最后发现
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="identity" /><!-- 这里比较奇怪啊 如果使用increment就不能插入数据 而使用了identity就可以???????????????? -->
</id>
基于XML配置
<id name="id" type="java.lang.Integer">
<column name="ID" precision="8" scale="0" />
<generator class="native" />
</id>
常见的generator:
increment:用于long、short、int类型唯一标识,只有在没有其他进程往同一张表中插入数据时才能使用,在集群下不能使用
identity:采用数据库提供的主键生成机制。如DB2、SQL Server、MySQL 中的主键生成机制。
sequence:采用数据库提供的sequence机制生成主键。如 Oralce 中的Sequence。
native: 由Hibernate 根据使用的数据库自行判断采用identity、hilo、sequence 其中一种作为主键生成方式。跨数据库平台!
hilo:通过hi/lo 算法实现的主键生成机制,需要额外的数据库表或字段提供高位值来源
uuid.string:与uuid.hex类似,只是生成的主键未进行编码(长度16),不能应用在 PostgreSQL数据库中。 (要求主键是String类型)