诚心请教一个关于hibernate代码设计的问题
项目设计中遇到一个问题,数据表某个字段的值需要在1到0之间变化。那我们在写该字段hibernate中更新的代码的时候可以分别写两个操作的方法,或者也可以写一个方法,通过构造查询条件来实现。现在的问题是,在hibernate中,怎么样设计是好的?代码如下:
=================
方法一:
public void updateIsCensor(String member_id,String mode) throws HibernateException{
StringBuffer updateTemp=new StringBuffer();
if ("ok".equals(mode)){
updateTemp.append("UPDATE Member SET isCensor=1");
}
if ("reset".equals(mode)){
updateTemp.append("UPDATE Member SET isCensor=0");
}
updateTemp.append(" where id='");
updateTemp.append(member_id);
updateTemp.append("'");
System.out.println("会员审核时候的 sql="+updateTemp.toString());
int updatedEntities = getSessionFactory().openSession().createQuery(updateTemp.toString()).executeUpdate();
}
==================================
方法二:
public void updateIsCensorOk(String member_id,String mode) throws HibernateException{
StringBuffer updateTemp=new StringBuffer();
updateTemp.append("UPDATE Member SET isCensor=1");
updateTemp.append(" where id='");
updateTemp.append(member_id);
updateTemp.append("'");
System.out.println("会员审核时候的 sql="+updateTemp.toString());
int updatedEntities = getSessionFactory().openSession().createQuery(updateTemp.toString()).executeUpdate();
}
public void updateIsCensorReset(String member_id) throws HibernateException{
StringBuffer updateTemp=new StringBuffer();
updateTemp.append("UPDATE Member SET isCensor=0");
updateTemp.append(" where id='");
updateTemp.append(member_id);
updateTemp.append("'");
System.out.println("会员审核时候的 sql="+updateTemp.toString());
int updatedEntities = getSessionFactory().openSession().createQuery(updateTemp.toString()).executeUpdate();
}
我个人感觉方法一会比较好,因为减少了很多代码量.但是不知道是否符合hibernate 的编程规则. 1 楼 Readonly 2007-08-08 不用Hibernate的对象概念,非要用createQuery, 用createQuery也罢,竟然不用占位符
2 楼 TESSS 2007-08-08 Readonly 写道不用Hibernate的对象概念,非要用createQuery, 用createQuery也罢,竟然不用占位符
请注意我的问题本身,谢谢。如果我写成createSQLQuery,你是不是会说我大逆不道了?这些都是hibernate的固有方法,按个人习惯来使用而已。
还有,我个人认为,操作数据库极小部分的字段状态,直接HQL或是SQL没什么不妥啊。一定要load数据出来,set然后再update么? 3 楼 leobluewing 2007-08-08 同2楼,你为什么不用对象呢?
对象取出来直接set值然后update多好啊,如果喜欢用sql语句直接来,也没什么不好,但是如果这样何苦要用hibernate呢?
还有,单纯说代码吧,如果业务变化了,突然又来个2你是不是要改蛮多的代码了?
隔离变化,把会变化的东西单独提出来比较好,还是象2楼说的用占位符吧。 4 楼 peacess 2007-08-09 如果取值变化是确定的,可以使用enum来实现,这样在类型安全等方面很好,很多问题编译就可以帮你搞定