请问在hibernate的配置文件中设置generator节点有什么用

我看书上写的native是数据库生成主键值,assigned是由程序生成主键值,请问这个生成主键值是干什么用的?还有由数据库还是程序来生成主键值有什么区别吗?... 我看书上写的native是数据库生成主键值,assigned是由程序生成主键值,请问这个生成主键值是干什么用的?还有由数据库还是程序来生成主键值有什么区别吗? 展开
 我来答
80295996
2011-07-02 · TA获得超过403个赞
知道小有建树答主
回答量:1028
采纳率:100%
帮助的人:357万
展开全部
所谓的数据库生成主键值就是在数据库中设置一个自增的主键,mysql就是 auto_increment,插入数据的时候这个字段插入null就可以,由数据库来根据当前值生成,程序生成主键就是数据库那边不设置,由程序按照相关算法如uuid生成一个唯一的字符串,然后直接把这个字符串插入数据库当主键, 实际原理就是如果是数据库生成,其内部需要在插入前先先查询当前的主键值,然后把主键值+1来充当插入数据的主键值,然后把数据插入,而程序生成的可以直接插入,性能能好一点,但程序生成的id可能存在重复的问题,而且如uuid 可读性比较差,具体应该看个人喜好而定 ,各有优劣
追问
什么情况下应该用native,什么情况下又应该用assigned呢
追答
不是说了么,如果你能接受uuid,uuid 的性能会略微高一点,而整形的自增id更直观,完全看开发者的喜好或实际项目需要,比如说有一个订单类,其中包括订单子项,那么才做插入时,应该是字表引用主表id,那么你执行一条插入主表的sql后,子项的主表id该设成什么呢?如果是uuid,那么直接设置即可,否则,应该查询数据库刚才插入的主表id是多少,然后在设给子项,然后在插入子项,这段能明白么? 程序生成的id在某些地方方便一些,但我更喜欢自增id,所以我来说一般是	@Id@GeneratedValue
百度网友9fb1cf3
2011-07-02 · TA获得超过627个赞
知道答主
回答量:100
采纳率:0%
帮助的人:71.7万
展开全部
native 主键是由数据库自己生成的,比如说:mysql 有个对主键自动累加的一种机制。
assigned 是由程序分配的,比如说:你用java给这个主键分配一个值。
主键一个是由数据库产生的,一个是由程序产生的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式