1:数据库一张表里面只有定义为key的行能设置为自增.一张表你可以定义多个key,但是一张表只能设置一个子增列.一般是设置到id(默认设置为primary key)上. 如果一张表只有一个列主键列id,先不说这么设计表有没有意义,你每次可以插入一个空项,id每次递增.你说数据库报错,那么需要更多信息,数据库版本,测试环境,具体报的什么错来进一步分析.
2:既然是用的orm框架,那么基本上在保存数据的时候会有返回值的吧,一般用法就是在程序里面创建一个对象,比如你想像1里面这样创建一个表,对应的对象实体比如档案编号只带一个值 id .那么你需要保存一个新的就可以建立一个新的空档案编号对象,然后保存以后返回的就是带当前id值的了.看了看apache cayenne文档,新增一条更简单,大概就是这么个写法 Artist artist = (Artist) context.newObject(Artist.class);不过既然你们是用java,那么java规范的jpa不是更好用么.还有看你提到主键插入值,你可以创建一个实体带你想要的id值,当然这个id是数据库里面没有分配过的,然后保存,但是这样的话下一个自动插入的对象,获得的id是从你刚刚保存的值开始自增的,不会自动填满系统原来最大id值和你刚刚保存的那个之间的部分.
3:同上,既然是用orm框架,那么一次persitent操作就是原子的啊,既然可以保存对象以后在返回的值里面拿到自动生成的id值,没必要再另外去尝试读取了.
另外你们这个设计谁做的啊,你们做项目有没有安排一个架构师跟进呢.看你问题里面描述的,又要高并发,高可用,那么把这么一个关键操作放到这样一张表里面来,这张表就存一个id,越简单那么其它表对它的依赖就越强,以后新增业务带来的复杂度增加有估算过没有呢.还有你们的系统部署是单实例的么,现在就在考虑每秒几k的访问操作,发展下去很快一台主机就抗不住了吧,有计划然后怎么办么,如果演变成多主机,那么数据库之间的同步还有协调准备怎么做,系统必须相应更新吧,到那时候再来做的话,业务量和发布新版本时间的压力就是山大了啊 |