1

我必须在 Hibernate 中转换以下 NamedSqlParameterSource:-

    final List<MenuActionMapping>  menusList;


    MapSqlParameterSource sqlParams = new MapSqlParameterSource();


    menusList = namedParameterJdbcTemplate.query("call sp_proc()",sqlParams ,new RowMapper<MenuActionMapping>() {
                @Override
                public MenuActionMapping mapRow(ResultSet resultset, int i)
                        throws SQLException {

    MenuActionMapping menuActionMapping=new MenuActionMapping();


                    menuActionMapping.setMenuKey(resultset.getString("KMM_MENU_KEY"));

                    menuActionMapping.setDisplayName(resultset.getString("KMM_DISPLAY_NAME"));
                    menuActionMapping.setMenuActionFlag(resultset.getInt("KMM_ACTION_FLAG"));
                    menuActionMapping.setMenuActive(resultset.getInt("KMM_ACTIVE"));
                    menuActionMapping.setMenuLevel(resultset.getInt("str_len"));

String str=resultset.getString("menu_actions");

String [] actions=str.split(",");
if(resultset.getInt("KRMM_ACTIVE")==1)
{
menuActionMapping.setActive(true);
}
else
{
    menuActionMapping.setActive(false);
}

for(String strAct:actions)
{
     if(strAct.equals("ADD"))
    {
    menuActionMapping.setAddCheckBox(true);
    menuActionMapping.setAddCheckBoxDisabled("true");
    }
                            if(strAct.equals("VIEW"))
                            {
                                menuActionMapping.setViewCheckBox(true);
                                menuActionMapping.setViewCheckBoxDisabled("true");
                            }
                            if(strAct.equals("DELETE"))
                            {
                                menuActionMapping.setDeleteCheckBox(true);
                                menuActionMapping.setDeleteCheckBoxDisabled("true");
                            }

                            if(strAct.equals("EDIT"))
                            {
                                menuActionMapping.setEditCheckBox(true);
                                menuActionMapping.setEditCheckBoxDisabled("true");
                            }
                            if(strAct.equals("DOWNLOAD"))
                            {
                                menuActionMapping.setDownloadCheckBox(true);
                                menuActionMapping.setDownloadCheckBoxDisabled("true");
                            }

                        }               

                        return menuActionMapping;
                    }
            });
        System.out.println(menusList);

    return menusList;

我不知道 namedJdbcTemplate 和 Map Row 是如何工作的,所以我遇到了一个问题。我还在 hibernate 中编写了备用代码,但它不起作用:-

                    final List<MenuActionMapping> menusList; 

        Query query= getSession().createSQLQuery("call kyc.sp_proc()");

        menusList=query.list();
        System.out.println(menusList);
        return menusList;

我想我没有设置 MenuAction 映射对象,那么如何达到目的?

另外我想在将列设置为对象之前对其进行操作,我该如何在休眠中进行操作...。

困扰我的主要代码是:-

String str=resultset.getString("menu_actions");
String [] actions=str.split(",");
if(resultset.getInt("KRMM_ACTIVE")==1)
{
    menuActionMapping.setActive(true);
}
else
{
    menuActionMapping.setActive(false);
}

for(String strAct:actions)
{
    if(strAct.equals("ADD"))
   {
        menuActionMapping.setAddCheckBox(true);
        menuActionMapping.setAddCheckBoxDisabled("true");
}
    if(strAct.equals("VIEW"))
    {
            menuActionMapping.setViewCheckBox(true);
        menuActionMapping.setViewCheckBoxDisabled("true");
}
    if(strAct.equals("DELETE"))
    {
        menuActionMapping.setDeleteCheckBox(true);
            menuActionMapping.setDeleteCheckBoxDisabled("true");
    }

    if(strAct.equals("EDIT"))
    {
        menuActionMapping.setEditCheckBox(true);
        menuActionMapping.setEditCheckBoxDisabled("true");
    }
    if(strAct.equals("DOWNLOAD"))
    {
        menuActionMapping.setDownloadCheckBox(true);
        menuActionMapping.setDownloadCheckBoxDisabled("true");
    }

如何在休眠中基于 1 列设置多个属性...

4

2 回答 2

1

namedJdbcTemplate帮助您减少获取、关闭连接等样板代码,而行映射器帮助您迭代返回的结果集并将其映射到所需的 Java 类。
检查这个http://www.mkyong.com/hibernate/how-to-call-store-procedure-in-hibernate/

于 2013-10-18T09:48:09.667 回答
0

感谢@Pratik 关于如何使用类属性映射休眠中的列? 我得到了我的问题的答案,我可以在休眠中使用 BasicTransformerAdapter 在休眠中实现与 jdbc 模板的行映射器相同的效果。我的代码如下: -

 final List<MenuActionMapping>  menusList;
                menusList = getSession().createSQLQuery("CALL kyc.sp_proc()").setResultTransformer(new BasicTransformerAdapter() {


                    private static final long serialVersionUID = 1L;
                    @Override
                      public Object transformTuple(Object[] tuple, String[] aliases)
                    {
                        MenuActionMapping menuActionMapping=new MenuActionMapping();
                        menuActionMapping.setMenuId((Integer)tuple[0]);
                        menuActionMapping.setMenuKey((String)tuple[1]);
                        menuActionMapping.setDisplayName((String)tuple[3]);
                        menuActionMapping.setMenuActionFlag((Integer)tuple[5]);
                        final Boolean b=(Boolean)tuple[6];
                        menuActionMapping.setMenuActive(b? 1 : 0);
                        final BigInteger big=(BigInteger) tuple[9];
                        menuActionMapping.setMenuLevel(big.intValue());
                        String str=(String)tuple[10];
                        String [] actions=str.split(",");
                        if(b==true)
                        {
                            menuActionMapping.setActive(true);
                        }
                        else
                        {
                            menuActionMapping.setActive(false);
                        }

                        for(String strAct:actions)
                        {
                            if(strAct.equals("ADD"))
                            {
                                menuActionMapping.setAddCheckBox(true);
                                menuActionMapping.setAddCheckBoxDisabled("true");
                            }
                            if(strAct.equals("VIEW"))
                            {
                                menuActionMapping.setViewCheckBox(true);
                                menuActionMapping.setViewCheckBoxDisabled("true");
                            }
                            if(strAct.equals("DELETE"))
                            {
                                menuActionMapping.setDeleteCheckBox(true);
                                menuActionMapping.setDeleteCheckBoxDisabled("true");
                            }

                            if(strAct.equals("EDIT"))
                            {
                                menuActionMapping.setEditCheckBox(true);
                                menuActionMapping.setEditCheckBoxDisabled("true");
                            }
                            if(strAct.equals("DOWNLOAD"))
                            {
                                menuActionMapping.setDownloadCheckBox(true);
                                menuActionMapping.setDownloadCheckBoxDisabled("true");
                            }

                        }               

                        return menuActionMapping;

                    }


                }).list();
于 2013-10-22T06:05:41.160 回答