精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-11-09
又建了一个a_sequence给A表特别用,同时添加触发器 每当对A表save一条记录后。就从a_sequence中取一个id. 但是出现了这样的问题: 我save完后能看到A表中的id值是a_sequence中的值 可是我立马去取这个刚刚存进去的记录时,想getid()出来的却是HIBERNATE_SEQUENCE里面的值 如何解决这个问题。使我能立马去取这个刚刚存进去的记录时,想getid()出来的就是我表中的ID值,一个正确的值 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-11-09
最后修改:2011-11-09
yingjun055 写道 在oracle里面新建了一个HIBERNATE_SEQUENCE做为一个全局的sequence,给N个表用。
又建了一个a_sequence给A表特别用,同时添加触发器 每当对A表save一条记录后。就从a_sequence中取一个id. 但是出现了这样的问题: 我save完后能看到A表中的id值是a_sequence中的值 可是我立马去取这个刚刚存进去的记录时,想getid()出来的却是HIBERNATE_SEQUENCE里面的值 如何解决这个问题。使我能立马去取这个刚刚存进去的记录时,想getid()出来的就是我表中的ID值,一个正确的值 1.hibernate 大忌使用触发器 2.解决方案关闭此表的二级缓存 3.如果想要不断续流水号使用select max(id)+1 from ........ |
|
返回顶楼 | |
发表时间:2011-11-09
抛出异常的爱 写道 yingjun055 写道 在oracle里面新建了一个HIBERNATE_SEQUENCE做为一个全局的sequence,给N个表用。
又建了一个a_sequence给A表特别用,同时添加触发器 每当对A表save一条记录后。就从a_sequence中取一个id. 但是出现了这样的问题: 我save完后能看到A表中的id值是a_sequence中的值 可是我立马去取这个刚刚存进去的记录时,想getid()出来的却是HIBERNATE_SEQUENCE里面的值 如何解决这个问题。使我能立马去取这个刚刚存进去的记录时,想getid()出来的就是我表中的ID值,一个正确的值 1.hibernate 大忌使用触发器 2.解决方案关闭此表的二级缓存 3.如果想要不断续流水号使用select max(id)+1 from ........ 我们这里有多机去使用这个id号的,如果用max的话,会发生,多台服务去同时调用同一个id的号码。如果用锁的话,会发生死锁的问题~~ |
|
返回顶楼 | |
发表时间:2011-11-09
触发做什么用?
|
|
返回顶楼 | |
发表时间:2011-11-10
likgui 写道 触发做什么用?
create or replace trigger bef_ins_t_country_define before insert on t_country_define referencing old as old new as new for each row begin new.country_id=s_country_id.nextval; end; |
|
返回顶楼 | |
发表时间:2011-11-10
yingjun055 写道 抛出异常的爱 写道 yingjun055 写道 在oracle里面新建了一个HIBERNATE_SEQUENCE做为一个全局的sequence,给N个表用。
又建了一个a_sequence给A表特别用,同时添加触发器 每当对A表save一条记录后。就从a_sequence中取一个id. 但是出现了这样的问题: 我save完后能看到A表中的id值是a_sequence中的值 可是我立马去取这个刚刚存进去的记录时,想getid()出来的却是HIBERNATE_SEQUENCE里面的值 如何解决这个问题。使我能立马去取这个刚刚存进去的记录时,想getid()出来的就是我表中的ID值,一个正确的值 1.hibernate 大忌使用触发器 2.解决方案关闭此表的二级缓存 3.如果想要不断续流水号使用select max(id)+1 from ........ 我们这里有多机去使用这个id号的,如果用max的话,会发生,多台服务去同时调用同一个id的号码。如果用锁的话,会发生死锁的问题~~ 那就只能用sequence,或者自己实现一个生成ID的功能 |
|
返回顶楼 | |
发表时间:2011-11-10
java_user 写道 yingjun055 写道 抛出异常的爱 写道 yingjun055 写道 在oracle里面新建了一个HIBERNATE_SEQUENCE做为一个全局的sequence,给N个表用。
又建了一个a_sequence给A表特别用,同时添加触发器 每当对A表save一条记录后。就从a_sequence中取一个id. 但是出现了这样的问题: 我save完后能看到A表中的id值是a_sequence中的值 可是我立马去取这个刚刚存进去的记录时,想getid()出来的却是HIBERNATE_SEQUENCE里面的值 如何解决这个问题。使我能立马去取这个刚刚存进去的记录时,想getid()出来的就是我表中的ID值,一个正确的值 1.hibernate 大忌使用触发器 2.解决方案关闭此表的二级缓存 3.如果想要不断续流水号使用select max(id)+1 from ........ 我们这里有多机去使用这个id号的,如果用max的话,会发生,多台服务去同时调用同一个id的号码。如果用锁的话,会发生死锁的问题~~ 那就只能用sequence,或者自己实现一个生成ID的功能 嗯,看来,只能用用UUID,啥的了~~就是有为长,看上去不太爽~~~ |
|
返回顶楼 | |
发表时间:2011-11-10
可以自己写一个id的生成,其大致的策略为,先缓存一定数量的Id。
|
|
返回顶楼 | |
发表时间:2011-11-10
Technoboy 写道 可以自己写一个id的生成,其大致的策略为,先缓存一定数量的Id。
我们会有多个环境操作一个数据,这样,如果多个环境对同一个ID进行操作的话,可能会出来,ID号被改成相现的情况发生吧~~~ |
|
返回顶楼 | |
发表时间:2011-11-10
yingjun055 写道 Technoboy 写道 可以自己写一个id的生成,其大致的策略为,先缓存一定数量的Id。
我们会有多个环境操作一个数据,这样,如果多个环境对同一个ID进行操作的话,可能会出来,ID号被改成相现的情况发生吧~~~ 不会,你只要维持同一时间只会生成一个ID就行了 防止并发的话,始终是要有个地方要排队等待的 如果性能有影响,就分段生成 |
|
返回顶楼 | |