Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我需要使用hibernate进行一对多插入的帮助_Java_Eclipse_Hibernate_One To Many - Fatal编程技术网

Java 我需要使用hibernate进行一对多插入的帮助

Java 我需要使用hibernate进行一对多插入的帮助,java,eclipse,hibernate,one-to-many,Java,Eclipse,Hibernate,One To Many,我是新来的,我需要你的帮助 我正在尝试使用hibernate进行一对多映射 我有一个公司表,这个表和另一个表有关系 布尔纳厄斯 因此,一家公司可能会有很多员工 所以我做了一个一对多的映射,并编写了一个代码和它的工作 这是我的DAO代码 公营公司道{ public String createCompany(companyDTO cDto) { SessionHelper sessionHelper = new SessionHelper(); Session session =

我是新来的,我需要你的帮助

我正在尝试使用hibernate进行一对多映射 我有一个公司表,这个表和另一个表有关系 布尔纳厄斯 因此,一家公司可能会有很多员工

所以我做了一个一对多的映射,并编写了一个代码和它的工作

这是我的DAO代码

公营公司道{

public String createCompany(companyDTO cDto) {

    SessionHelper sessionHelper = new SessionHelper();
    Session session = sessionHelper.getSession();

    session.beginTransaction();
    session.persist(cDto);
    session.getTransaction().commit();
    session.close();

    return "Company Table Created Succesfully";
}
}

这是我的主要观点:

    companyDTO cdto = new companyDTO();
    cdto.setcName("Profix");
    cdto.setcEmail("po@gmail.com");
    cdto.setcPhone("07808551147");
    cdto.setcNbransh(3);

    branshesDTO bdtomain = new branshesDTO();
    bdtomain.setbName("profect");
    bdtomain.setbPhone("0788965452");
    bdtomain.setbEmail("pr@gmail.com");
    bdtomain.setbLocation("Amman");

    branshesDTO bdto2 = new branshesDTO();
    bdto2.setbName("Leeg");
    bdto2.setbPhone("0095622232");
    bdto2.setbEmail("lee@gmail.com");
    bdto2.setbLocation("Amman");

    List<branshesDTO> branshesDTOs = new ArrayList<branshesDTO>();
    branshesDTOs.add(bdtomain);
    branshesDTOs.add(bdto2);

    cdto.setDtos(branshesDTOs);
    companyDAO cdao = new companyDAO();

    String res = cdao.createCompany(cdto);
    System.out.println("Res:" + res);
branshesDTO bdtoo = new branshesDTO();
companyDAO comdao = new companyDAO();

bdtoo.setbName("bbffffbbb");
bdtoo.setbPhone("215f51");
bdtoo.setbEmail("s@gmail.com");
bdtoo.setbLocation("jhhhhjj");
comdao.addANewBranch(bdtoo, 1);
这是我的hbm.xml文件:

现在,当我想添加公司时,我的代码在这里 我把它的皮加在一起

所以现在在我建立了一个公司和一个bransh

然后,如果我想添加另一个与同一个公司id相关的branshes

如何添加

这是我的sql表后,公司应用的代码

这是我的布朗什表:

正如你在cid 1的bransh表中看到的,我有两个bransh

那么我如何为公司id 1添加另一个bransh

没有在公司表中定义新公司

我想在一个函数中添加公司 在另一个函数上加上bransh,而不是在一起


如何做到这一点???

首先基于公司名称,如果是唯一的,则获取公司id,然后您可以将其他分支机构详细信息添加到同一公司。确保使用session.get方法而不是load方法。。。因为当我们使用load方法时,如果给定的公司没有名称,您将获得对象未找到异常,所以最好使用get方法。

首先您可以在映射文件中设置

 <set name="dtos" inverse="true" cascade="all">
您可以使用此工具在现有公司中添加新分支 您可以使用其id预先列出公司

public void addANewBranch(BranchDTO branchDTO, Integer companyDtoId) {

    Session session = sessionFactory.openSession();
    try {

        session.getTransaction().begin();
        CompanyDto com= session.get(CompanyDto .class,companyDtoId);
         com.addBranch(branchDTO);
        session.update(com);
        session.getTransaction().commit();

    } catch (Exception e) {
        session.getTransaction().rollback();
        logger.error("Error occurredr. Error stack trace: " + e.toString());
    } finally {
        session.close();
    }
在main类中,可以调用此方法

BranchDTO branchDTO = new BranchDTO ("your fields values");
yourobjectDao.addANewBranch(branchDTO , your company id)
我想这会有帮助的

在我将此代码写在main上之后:

    companyDTO cdto = new companyDTO();
    cdto.setcName("Profix");
    cdto.setcEmail("po@gmail.com");
    cdto.setcPhone("07808551147");
    cdto.setcNbransh(3);

    branshesDTO bdtomain = new branshesDTO();
    bdtomain.setbName("profect");
    bdtomain.setbPhone("0788965452");
    bdtomain.setbEmail("pr@gmail.com");
    bdtomain.setbLocation("Amman");

    branshesDTO bdto2 = new branshesDTO();
    bdto2.setbName("Leeg");
    bdto2.setbPhone("0095622232");
    bdto2.setbEmail("lee@gmail.com");
    bdto2.setbLocation("Amman");

    List<branshesDTO> branshesDTOs = new ArrayList<branshesDTO>();
    branshesDTOs.add(bdtomain);
    branshesDTOs.add(bdto2);

    cdto.setDtos(branshesDTOs);
    companyDAO cdao = new companyDAO();

    String res = cdao.createCompany(cdto);
    System.out.println("Res:" + res);
branshesDTO bdtoo = new branshesDTO();
companyDAO comdao = new companyDAO();

bdtoo.setbName("bbffffbbb");
bdtoo.setbPhone("215f51");
bdtoo.setbEmail("s@gmail.com");
bdtoo.setbLocation("jhhhhjj");
comdao.addANewBranch(bdtoo, 1);
然后运行它,我在我的控制台上得到这个异常:

Mar 29, 2018 1:05:41 PM org.hibernate.boot.jaxb.internal.stax.LocalXmlResourceResolver resolveEntity
WARN: HHH90000012: Recognized obsolete hibernate namespace http://hibernate.sourceforge.net/hibernate-mapping. Use namespace http://www.hibernate.org/dtd/hibernate-mapping instead.  Support for obsolete DTD/XSD namespaces may be removed at any time.
Mar 29, 2018 1:05:41 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
WARN: HHH10001002: Using Hibernate built-in connection pool (not for production use!)
Mar 29, 2018 1:05:41 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001005: using driver [com.mysql.jdbc.Driver] at URL [jdbc:mysql://localhost:3306/omartest]
Mar 29, 2018 1:05:41 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001001: Connection properties: {user=root, password=****}
Mar 29, 2018 1:05:41 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001003: Autocommit mode: false
Mar 29, 2018 1:05:41 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections <init>
INFO: HHH000115: Hibernate connection pool size: 20 (min=1)
Thu Mar 29 13:05:41 EET 2018 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
Mar 29, 2018 1:05:41 PM org.hibernate.dialect.Dialect <init>
INFO: HHH000400: Using dialect: org.hibernate.dialect.MySQL5Dialect
Mar 29, 2018 1:05:42 PM org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl getIsolatedConnection
INFO: HHH10001501: Connection obtained from JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess@7e1a1da6] for (non-JTA) DDL execution was not in auto-commit mode; the Connection 'local transaction' will be committed and the Connection will be set into auto-commit mode.

那么现在我要做什么呢???

请不要问多个问题。我建议读太多的问题扫描你写在这里的代码将添加新的布兰什到公司id 1??所以你想让我把这个addBranch放在我的CompanyTo课堂上??把addANewBranch放在我的刀课上??所以我必须在我的main中写什么呢?使用它和be通过它的id为你们的公司获取参考,然后由你们的新分支和你们的公司调用这个函数。对不起,我知道我问了很多问题,但我是新的,你们能告诉我这个代码在我的main中是如何写的吗?真的,我非常抱歉,我在我的main上写这个:branshesDTO bdtoo=new branshesDTO;companyDAO comdao=新companyDAO;bdtoo.setbNamebbffffbbb;bdtoo.setbPhone21551;我也是。setbEmails@gmail.com; bdtoo.setBlocationJHHHJJ;comdao.addANewBranchbdtoo,1;然后运行代码,但mysql上的Bransher表什么也没发生?我必须做什么?这是运行后控制台上的异常