需求就是有大概几十个不同的type,不同的type,
持久化到不同的表里,用hibernate怎么做啊?
下面这样做要写几十个if else有其他方法吗?
String sql = "select type,field1,field2,field3.";
//获取sql中的type
String type = rs.getString("type");//如果type是tableA就获取field1
if(type.equls("tableA"))
session.save(new classTableA().setField1(rs.getString('field1')));
//如果type是tableB就获取field2
else if(type.equls("tableB"))
  session.save(new classTableB().setField2(rs.getString('field2')));如果不用hib用sql也要写很多有其他方法吗?
String insertSql = "";
if(type.equls("tableA"))
insertSql = "insert xxx value(xxx=" +  rs.getString('field1');
if(type.equls("tableB"))
insertSql = "insert xxx value(xxx=" +  rs.getString('field2');

解决方案 »

  1.   

    怎么写能不写这么多的if else啊
      

  2.   

    switch 目前不支持字符串
    暂时没想到有什么好办法
      

  3.   

    用sql应该好点,把表名作为一个参数,传进查询的dao里。调用查询方法时如下
    array = (ArrayList)testdao.find(type);
    查询的dao里接受参数:public String find_by_dwbm(String table_type)
    sql这样写:sql = "select * from "+table_type;动态获取表名(或者说表类型),直接省略if else判断的过程。呵呵,有时后hibernate很麻烦,用JDBC处理更简洁。
      

  4.   

    用数字代表状态,当等于那个时,改变数,再switch.
      

  5.   

    把type和file分别存到一个数组里,然后 循环就行了
      

  6.   

     建议用JDBC或者调用存储过程,将类型做为参数传入.
      

  7.   

    还是用jdbc比较好啊。帮你顶 ,等高手。
      

  8.   

    在传参时尽量不要用String,用int比较好。
      

  9.   

    引用 4 楼 wenfei208 的回复:
    用sql应该好点,把表名作为一个参数,传进查询的dao里。调用查询方法时如下 
    array = (ArrayList)testdao.find(type); 
    查询的dao里接受参数:public String find_by_dwbm(String table_type) 
    sql这样写:sql = "select * from "+table_type; 动态获取表名(或者说表类型),直接省略if else判断的过程。呵呵,有时后hibernate很麻烦,用JDBC处理更简洁。 和不错的建议啊。
      

  10.   

    这种数据库的设计不符合hibernate这种or工具
    hibernate的各种关联,包括继承等机制,都是先知道要用hibernate了,然后根据这种工具去设计数据库楼主这个应该是遗留数据库问题,直接用sql会好一些是否可以建立一个table和column的对应关系表,这样可以通过一个循环生成insert语句
      

  11.   

    什么意思没看明白!
    array = (ArrayList)testdao.find(type); 这是什么啊?查询的dao里接受参数:public String find_by_dwbm(String table_type)  这又是什么意思啊?sql这样写:sql = "select * from "+table_type; 您的意思是增加一个type 和 table的对应数据库表 然后用type去数据库查出该type对应需要插入的表名吗?
      

  12.   

    if else 其实也挺好用的啊~~