【问题标题】:Multiple Databases in Spring HibernateSpring Hibernate 中的多个数据库
【发布时间】:2017-03-11 00:38:34
【问题描述】:

我想问我如何在我的程序中连接第二个数据库。首先我告诉你这是一个库存系统。我想获得当我更新现有数据库记录中的记录时也更新到其他数据库的功能。请检查代码。我将此代码用于单个数据库连接和更新记录。 我在我的网页中创建了另一个按钮。当我单击第二个按钮记录保存在第二个数据库中时,我需要它。

jdbc.driver=com.mysql.jdbc.jdbc2.optional.MysqlDataSource
jdbc.driver2=com.mysql.jdbc.Driver
jdbc.dialect=org.hibernate.dialect.MySQLDialect
jdbc.databaseurl=jdbc:mysql://localhost:3306/bvasdb?zeroDateTimeBehavior=convertToNull&autoReconnect=true&useUnicode=true&characterEncoding=UTF-8
jdbc.username=admin
jdbc.password=admin

<beans:property name="dataSource">
<beans:bean class="${jdbc.driver}">
  <beans:property name="url" value="${jdbc.databaseurl}" /> 
  <beans:property name="user" value="${jdbc.username}" /> 
  <beans:property name="password" value="${jdbc.password}" /> 
  </beans:bean>

@RequestMapping("partmaintenanceupdate")
    public ModelAndView partmaintenanceUpdate(@RequestParam("partmaintenancemode") String partmaintenancemode,
            @RequestParam("searchpartno") String searchpartno,
            @RequestParam("makemodelcodeselected") String makemodelcodeselected,
            @RequestParam("subcategoryselected") String subcategoryselected,
            @RequestParam("ordertypeselected") String ordertypeselected, Model map, HttpSession session,
            ModelAndView mav) {
        AppUser user = (AppUser) session.getAttribute("user");
        if (user == null) {
            throw new OrderNotFoundException();
        } else {
            LOGGER.info("#partmaintenanceupdate");
            if (subcategorylistdd.size() == 0) {
                subcategorylistdd = mainService.getAllSubCategory();
            }
            if (makemodellistdd.size() == 0) {
                makemodellistdd = mainService.getAllMakeModelMap();
            }
            if (ordertypelistdd.size() == 0) {
                ordertypelistdd = mainService.getAllOrderType();
            }

            partmaintenancemode = "update";

            parts.setPartno(request.getParameter("partno").trim().toUpperCase());
            parts.setInterchangeno(request.getParameter("interchangeno").trim().toUpperCase());
            parts.setYear(request.getParameter("year").trim());
            parts.setYearfrom(Integer.parseInt(request.getParameter("yearfrom").trim()));
            parts.setYearto(Integer.parseInt(request.getParameter("yearto").trim()));
            parts.setPartdescription(request.getParameter("partdescription").trim());
            parts.setActualprice(new BigDecimal(request.getParameter("actualprice").trim()));
            parts.setCostprice(new BigDecimal(request.getParameter("costprice").trim()));
            parts.setListprice(new BigDecimal(request.getParameter("listprice").trim()));
            parts.setWholesaleprice(new BigDecimal(request.getParameter("wholesaleprice").trim()));
            parts.setUnitsinstock(Integer.parseInt(request.getParameter("unitsinstock").trim()));
            parts.setUnitsonorder(Integer.parseInt(request.getParameter("unitsonorder").trim()));
            parts.setReorderlevel(Integer.parseInt(request.getParameter("reorderlevel").trim()));
            parts.setSafetyquantity(Integer.parseInt(request.getParameter("safetyquantity").trim()));
            parts.setKeystonenumber(request.getParameter("keystonenumber").trim());
            parts.setOemnumber(request.getParameter("oemnumber").trim());
            parts.setDpinumber(request.getParameter("dpinumber").trim());
            parts.setLocation(request.getParameter("location").trim());
            parts.setCapa(request.getParameter("capa").trim());
            parts.setMakemodelcode(makemodellistdd.get(request.getParameter("makemodelcodeselected").trim()));
            parts.setSubcategory(subcategorylistdd.get(request.getParameter("subcategoryselected").trim()));
            parts.setOrdertype(request.getParameter("ordertypeselected").trim());
            partsService.updatePartsMaintenance(parts);

            mav.clear();
            mav.setViewName("partmaintenancepage");
            mav.addObject("user", user);
            mav.addObject("branch", branch);
            mav.addObject("appcss", appcss);
            mav.addObject("sysdate", InsightUtils.getNewUSDate());
            mav.addObject("partmaintenancemode", partmaintenancemode);
            mav.addObject("subcategorylistdd", subcategorylistdd);
            mav.addObject("makemodellistdd", makemodellistdd);
            mav.addObject("ordertypelistdd", ordertypelistdd);
            mav.addObject("makemodelcodeselected", makemodelcodeselected);
            mav.addObject("subcategoryselected", subcategoryselected);
            mav.addObject("ordertypeselected", ordertypeselected);
            mav.addObject("searchpartno", searchpartno);
            mav.addObject("parts", parts);
            return mav;
        }
    }

@Transactional
    public void updatePartsMaintenance(Parts parts) {
        Session session = sessionFactory.getCurrentSession();
        session.saveOrUpdate(parts);

        // updateSubcategoryOnParts();
        // updateMakemodelOnParts();
        session.flush();
        session.clear();
    }

我在我的网页中创建了一个按钮。只有当我单击按钮时,我才需要更新第二个数据库中的数据。

【问题讨论】:

标签: java hibernate spring-mvc netbeans-8


【解决方案1】:

如果您需要多个 DB,则需要多个 HibernateSessionFactory。

您只需为每个数据库创建一个休眠工厂,并在每个配置中使用相关的表映射。

【讨论】:

    【解决方案2】:

    创建多个数据源 bean 并在自动装配时使用 @Qualifier 来选择所需的连接。

    【讨论】:

    • 第一次更新时如何同时更新第二个数据库。 ?
    • 如果是这种情况,您必须创建 2 个连接。
    猜你喜欢
    • 2010-11-06
    • 2012-01-31
    • 2017-12-18
    • 2010-12-26
    • 2014-07-24
    • 1970-01-01
    • 2012-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多