锁定老帖子 主题:hibernate引出的几个纠结事件分析
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2011-04-28
palmer 写道 无盐以对
id的问题和 hibernate 没有关系。 new Brand, remove 是基本的 Object的状态的问题。 不想贬低。。。不过这是基本概念, 看书应该细致一点。 我没说id 跟hibernate有关系 原文是这样的: 首先:数据库字段设为自增长的时候,比如现在数据库里面的id是1,那么我继续插入,如果失败,下次我再插入结果就是3 我删除数据库所有数据,再次强势再插入结果是4 这个数据库是怎么回事,为什么插入失败,下次再插入,他会是3,删除所有数据,再次插入会是4呢? 以前一直用,还真没想过 |
|
返回顶楼 | |
发表时间:2011-04-28
还有一个问题就是对于枚举类型的映射。也不知道是hibernate的问题还是我的问题。搞的我焦头烂额。在拼接Hql语句的时候,用到了setParameter(objs, types);当Object[] 包含枚举类型的时候,Type[]中没法映射,我试了好久都没有解决!重写UserType依旧不好使。。。哎~~纠结!
|
|
返回顶楼 | |
发表时间:2011-04-28
悲剧了 写道 我删除数据库所有数据,再次强势再插入结果是4 这个数据库是怎么回事,为什么插入失败,下次再插入,他会是3,删除所有数据,再次插入会是4呢? 以前一直用,还真没想过 delete清表数据,是不会重置id的吧, 截短表才会重置id; truncate TABLE tabname; |
|
返回顶楼 | |
发表时间:2011-04-28
楼主之前没用过hibernate的吧,哎,这都不是问题,自己没理解
|
|
返回顶楼 | |
发表时间:2011-04-28
Jclick 写道 还有一个问题就是对于枚举类型的映射。也不知道是hibernate的问题还是我的问题。搞的我焦头烂额。在拼接Hql语句的时候,用到了setParameter(objs, types);当Object[] 包含枚举类型的时候,Type[]中没法映射,我试了好久都没有解决!重写UserType依旧不好使。。。哎~~纠结!
枚举默认是按照索引存储的 比如 0,1,2............ |
|
返回顶楼 | |
发表时间:2011-04-29
删除表数据采用trucate tablename,自增字段将重置,hibernate主键策略如果采用increment应该可以实现lz要求的每次都取当前表最大值的下一个值的要求,即主键完全按顺序来
|
|
返回顶楼 | |
发表时间:2011-04-29
因为你的操作虽然失败,但也操作到了数据库,所以自增长也算了一次。
|
|
返回顶楼 | |
发表时间:2011-04-29
kjj 写道 Jclick 写道 还有一个问题就是对于枚举类型的映射。也不知道是hibernate的问题还是我的问题。搞的我焦头烂额。在拼接Hql语句的时候,用到了setParameter(objs, types);当Object[] 包含枚举类型的时候,Type[]中没法映射,我试了好久都没有解决!重写UserType依旧不好使。。。哎~~纠结!
枚举默认是按照索引存储的 比如 0,1,2............ 我自然知道是按照索引存储的,但是我的需求场景是这样的: public PageBean getListForPage(final Object info,final String conditionHQL, final int currentPage, final Object[] objs, final Type[] types) { // HibernateTemplate hibernateTemplate = getHibernateTemplate()executeFind; List list = hibernateTemplate.executeFind(new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { //创建HQL语句 Query query; String hql = getHQL(info, conditionHQL); if(objs == null || types == null){ query = session.createQuery(hql); }else{ query = session.createQuery(hql).setParameters(objs, types); } query.setFirstResult((currentPage-1)*Constant.MAX_RESULTS); query.setMaxResults(Constant.MAX_RESULTS); List list = query.list(); return list; } }); 上边是方法的一段。如果hql语句中用到了枚举类型的。比如性别。那Type[]中应该怎么写?难道是Hibernate.Integer.显然是不对的。而我用成Hibernate.serializable(serializableClass) Hibernate.custom(userTypeClass),竟然默认选择的全是枚举的第一个。求解释。。。。。。。。。 |
|
返回顶楼 | |
发表时间:2011-05-01
id的问题确实是那么回事,偶也不知道怎么解决
|
|
返回顶楼 | |
发表时间:2011-05-01
使用new产生的对象并没有被持久化,所以会出错,对于代理这个问题你p.getBrands().remove(b)这个已经发出语句了却不能解除级联关系,不解,继续等待讨论
|
|
返回顶楼 | |