5 回答
TA贡献1827条经验 获得超9个赞
native有天生的,本土的,也就是说生来就有的,
那也就是说自动生成,不需要人工来帮忙或者管控的.
而assigned是指指定的,分配的,
如果你不赋予他甚麼东西,那麼他是不能实现的.
需要人工,自己把某个东西赋予给它
所以是assigned
在用Hibernate的时候,当有表中的主键是库自动生成的时候将使用native。
<generator class="native"></generator>
而当是自己添加的时候则需要改为assigned。
<generator class="assigned"></generator>
否则将会出现异常!
如果建表时,该表主键类型是integer,并设置成auto-increment,用native;该表主键类型是string类型的,用uuid.hex
TA贡献1863条经验 获得超2个赞
这是用来设置主键生成策略的。
具体策略:
Hibernate的Generator属性有7种class,本文简略描述了这7种class的意义和用法。 1、identity:用于MySql数据库。特点:递增 < id name="id" column="id"> < generator class="identity"/> < /id> 注:对于MySql数据库使用递增序列时需要在建表时对主键指定为auto_increment属性。 2、sequence:用于Oracle数据库 < id name="id" column="id"> < generator class="sequence"> < param name="sequence">序列名< /param> < /generator> < /id> 3、native:跨数据库时使用,由底层方言产生。 Default.sequence为hibernate_sequence < id name="id" column="id"> < generator class="native"/> < /id> 注:使用native时Hibernate默认会去查找Oracle中的hibernate_sequence序列。 如果Oracle中没有该序列,连Oracle数据库时会报错。 4、hilo:通过高低位合成id,先建表hi_value,再建列next_value。必须要有初始值。 < id name="id" column="id"> < generator class="hilo"> < param name="table">high_val< /param> < param name="column">nextval< /param> < param name="max_lo">5< /param> < /generator> < /id> 5、sequencehilo:同过高低位合成id,建一个sequence序列,不用建表。 < id name="id" column="id"> < generator class="hilo"> < param name="sequence">high_val_seq< /param> < param name="max_lo">5< /param> < /generator> < /id> 6、assigned:用户自定义id; < id name="id" column="id"> < generator class="assigned"/> < /id> 7、foreign:用于一对一关系共享主健时,两id值一样。 |
TA贡献1802条经验 获得超5个赞
一般id应该是唯一的,所以oracle 设计了序列,你可以在创建某个表时为其创建唯一的序列,此序列按照一定的规则产生唯一的id,在你添加记录时自动生成一个唯一的id给那张表。所以hibernate才有这个<generator>来设置你的oracle数据库表的对应的序列啊。
class为别的值时,有其他的属性啊,表其实可以没有序列的。
- 5 回答
- 0 关注
- 1087 浏览
添加回答
举报