在项目中要将一个带id的实体保存到数据库中,但是发现保存到数据库时,数据是保存到数据库中,但是id的主键却被改变了,最后找到了原因在hibernate的xml的主键生成策略选择错误。改为下面的就可以了。
<id name="themeTypeId" type="long" column="theme_type_id"
unsaved-value="0" access="field">
<!-- 主键采用手动的配置id的方式,即保存到数据库时,实体类中带有id值 -->
<generator class="assigned" />
<!-- <generator class="sequence">
<param name="sequence">ir_item.item_theme_type_seq</param>
</generator> -->
</id>
自定义的序列(数据库用的是postgre):
CREATE SEQUENCE ir_item.item_theme_type_seq
INCREMENT 1
MINVALUE 1
MAXVALUE 9223372036854775807
START 4
CACHE 1;
ALTER TABLE ir_item.item_theme_type_seq
OWNER TO ir_plus;