请问在hibernate的配置文件中设置generator节点有什么用
我看书上写的native是数据库生成主键值,assigned是由程序生成主键值,请问这个生成主键值是干什么用的?还有由数据库还是程序来生成主键值有什么区别吗?...
我看书上写的native是数据库生成主键值,assigned是由程序生成主键值,请问这个生成主键值是干什么用的?还有由数据库还是程序来生成主键值有什么区别吗?
展开
展开全部
所谓的数据库生成主键值就是在数据库中设置一个自增的主键,mysql就是 auto_increment,插入数据的时候这个字段插入null就可以,由数据库来根据当前值生成,程序生成主键就是数据库那边不设置,由程序按照相关算法如uuid生成一个唯一的字符串,然后直接把这个字符串插入数据库当主键, 实际原理就是如果是数据库生成,其内部需要在插入前先先查询当前的主键值,然后把主键值+1来充当插入数据的主键值,然后把数据插入,而程序生成的可以直接插入,性能能好一点,但程序生成的id可能存在重复的问题,而且如uuid 可读性比较差,具体应该看个人喜好而定 ,各有优劣
追问
什么情况下应该用native,什么情况下又应该用assigned呢
追答
不是说了么,如果你能接受uuid,uuid 的性能会略微高一点,而整形的自增id更直观,完全看开发者的喜好或实际项目需要,比如说有一个订单类,其中包括订单子项,那么才做插入时,应该是字表引用主表id,那么你执行一条插入主表的sql后,子项的主表id该设成什么呢?如果是uuid,那么直接设置即可,否则,应该查询数据库刚才插入的主表id是多少,然后在设给子项,然后在插入子项,这段能明白么? 程序生成的id在某些地方方便一些,但我更喜欢自增id,所以我来说一般是 @Id@GeneratedValue
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询