
从零蛋娃娃的回复中得到启示,解决问题。
重新表述需求: id自增长,同时需要一个键uniquekey是唯一键。
解决方法就是:
把id在索引中设置索引类型为任意一个类型,比如normal,然后unique就可以设置为主键了。
或者反过来,id自增长,同时作为主键。 uniquekey在索引中索引类型设置为unique即可。
补充:考虑到主键能设置成外键,所以建议用以上第一种方式。
您好,increment:代理主键,适合于所有数据库,由hibernate维护主键自增,和底层数据库无关,但是不适合于2个或以上hibernate进程。
identity:代理主键,适合于Mysql或ms sql server等支持自增的dbms,主键值不由hibernate维护。
sequence:代理主键,适合于oracle等支持序列的dbms,主键值不由hibernate维护,由序列产生。
native:代理主键,根据底层数据库的具体特性选择适合的主键生成策略,如果是mysql或sqlserver,选择identity,如果是oracle,选择sequence。
hilo:代理主键,hibernate把特定表的字段作为hign值,生成主键值
uuidhex:代理主键,hibernate采用uuid 128位算法生成基于字符串的主键值
assign:适合于应用程序维护的自然主键。
想要实现安全的自增只能使用hibernate维护得自增属性identity,或者使用开发者自己维护id值assign。如果使用identify,经过测试发现使用无论开发者是否给对象的id赋值,hibernate在保存对象时会自动给id赋值(为mysql表中id最大值+1);如果使用assign,用户在保存对象前必须给对象的id赋值,值必须大于等于0,如果等于0时,那么数据表id记录会使用mysql数据库维护的最大id+1,如果大于0时,则表id则为用户设置的对象的id值。
经过实验得出,想要实现mysql的sql语句句式以及最终效果,需要设置hibernate配置文件的id自增属性为assign,如果知道id的话则设置对象的id为已知的id,否则设置id的值为0,。
如果id自增属性为assign,那么hibernate保存对象后,对象的id仍然为保存前设置的值;
如果id自增属性为identity,那么hibernate保存对象后,对象的id为数据库中该条记录的id的值。
第一步:创建sequence;
create sequence test_seq
increment by 1
start with 4
maxvalue 1800
minvalue 4
cache 4;
解释:创建名为test_seq的sequence,从4开始,每次增加1,最大值是1800,最小值是4,cache 4 表示会缓存四个序列号,比如4、 5、 6、 7。
第二步:sql语句插入,每次插入一次就会根据增加规则自动递增。
sql:insert into tablename(id) values(test_seqnextval);
解释:第一次插入的id为 4,再次执行为5,依次类推
sequence就是一个序列,你每次执行 select CASE_SEQnextval from dual 的时候都会返回唯一的一个ID号,因此你可以先执行这个select取到这个ID,如果这个时候有多个用户在执行这个 *** 作,那么他们select到的ID绝对跟你的不一样(sequence就是保证这一点的)。然后你就可以用这个ID插入记录,然后再返回这个ID就OK了。
代码:
string sql = "Select CASE_SEQcurrval from dual";
OracleConnection conn = DBgetCon();
OracleCommand cmd = connCreateCommand();
connOpen();
string returnID = null;
cmdCommandText = sql;
returnID = ConvertToString(cmdExecuteScalar()); //获取ID
sql = "insert into PATIENT_T(pid,name) values(returnID,'黎明')"; //将ID插入数据库
cmdCommandText = sql;
cmdExecuteNonQuery();
connClose();
结束了,差不多就是这样,楼主自己调试一下就行了,注意ID在数据库中应该是varcahr类型的
以上就是关于mysql数据库怎么让id自动增长,但ID不是主键。难道只有ID为主键时,才可以自增的么全部的内容,包括:mysql数据库怎么让id自动增长,但ID不是主键。难道只有ID为主键时,才可以自增的么、使用Struts和Hibernate做用户注册(数据库MySQL),“用户”主键为int型的自增的ID,怎样插入后获得id、怎么获取自增语句的主键等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)