Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.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抛出未声明的HrowableException_Java_Hibernate_Exception_Merge_Mapping - Fatal编程技术网

Java 当我尝试合并时,Hibernate抛出未声明的HrowableException

Java 当我尝试合并时,Hibernate抛出未声明的HrowableException,java,hibernate,exception,merge,mapping,Java,Hibernate,Exception,Merge,Mapping,尝试合并仪表板VO对象时出现问题。如果我尝试插入一个新对象或更新,一切都正常(但是更新我需要自己更新仪表板的“perfis”和“itens”) 我的仪表板VO: public class DashboardVO implements Serializable { private static final long serialVersionUID = 1L; private int idDashboard; private String descricao; privat

尝试合并仪表板VO对象时出现问题。如果我尝试插入一个新对象或更新,一切都正常(但是更新我需要自己更新仪表板的“perfis”和“itens”)

我的仪表板VO:

public class DashboardVO implements Serializable {
   private static final long serialVersionUID = 1L;
   private int idDashboard;
   private String descricao;
   private String publico;
   private Set<DashboardPerfilVO> perfis = new HashSet<DashboardPerfilVO>();
   private Set<DashboardItemVO> itens = new HashSet<DashboardItemVO>();

public int getIdDashboard() {
    return idDashboard;
}

public void setIdDashboard(int idDashboard) {
    this.idDashboard = idDashboard;
}

public String getDescricao() {
    return descricao;
}

public void setDescricao(String descricao) {
    this.descricao = descricao;
}

public String getPublico() {
    return publico;
}

public void setPublico(String publico) {
    this.publico = publico;
}

public Set<DashboardPerfilVO> getPerfis() {
    return perfis;
}

public void setPerfis(Set<DashboardPerfilVO> perfis) {
    this.perfis = perfis;
}

public Set<DashboardItemVO> getItens() {
    return itens;
}

public void setItens(Set<DashboardItemVO> itens) {
    this.itens = itens;
}

@Override
public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + idDashboard;
    return result;
}

@Override
public boolean equals(Object obj) {
    if (this == obj)
        return true;
    if (obj == null)
        return false;
    if (getClass() != obj.getClass())
        return false;
    DashboardVO other = (DashboardVO) obj;
    if (idDashboard != other.idDashboard)
        return false;
    return true;
}
}
然后我得到这个:

SEVERE: Servlet.service() for servlet [action] in context with path [/itauditor] threw exception [java.lang.reflect.UndeclaredThrowableException] with root cause java.lang.StackOverflowError
问题1:我想更新DashboardVO对象及其“perfis”和“itens”。我应该使用合并还是更新?我应该先更新“perfis”和“itens”,然后再更新DashboardVO吗


问题2:为什么会发生这种异常?这是一个映射问题吗?我做错了什么?

我不能发布完整的StackTrace,因为它太长了。我可以用另一种方式来展示它?
使用root-cause java.lang.StackOverflowerr
循环多少次?好吧,我不做任何循环,但是当调用merge方法时,开始所有这些选择(选择几乎是无限的),它一直运行,直到突然停止并将异常抛出到它崩溃的哪一行?它在这里崩溃:dashboardDAO.merge(dashboardVO,session);
@SuppressWarnings("unchecked")
public ActionForward save(ActionMapping mapping, ActionForm form,
        HttpServletRequest request, HttpServletResponse response)
        throws HibernateException, Exception {

    ActionErrors errors = new ActionErrors();
    SessionFactory sf = HibernateUtil.getSessionFactory();
    DashboardForm dashboardForm = (DashboardForm) form;
    Dashboard dashboard = new Dashboard();
    DashboardVO dashboardVO;

    if (dashboardForm.getIdDashboard() == null
            || dashboardForm.getIdDashboard().equals("")) {
        dashboardVO = new DashboardVO();
    } else {
        dashboardVO = dashboard.retornaDashboard(Integer
                .parseInt(dashboardForm.getIdDashboard()));
    }
    dashboardVO.setDescricao(dashboardForm.getDescricao());
    dashboardVO.setPublico(dashboardForm.getPublico());

    Set<DashboardPerfilVO> perfis = new HashSet<DashboardPerfilVO>();
    ArrayList<DashboardPerfilVO> perfisDashboard = (ArrayList<DashboardPerfilVO>) request
            .getSession().getAttribute("perfisDashboard");

    boolean existePerfilAlterar = false;

    if (perfisDashboard != null) {
        for (DashboardPerfilVO dashboardPerfilVO : perfisDashboard) {
            if (dashboardPerfilVO.getAlterar() == 1) {
                existePerfilAlterar = true;
            }
            dashboardPerfilVO.setDashboardVO(dashboardVO);
            perfis.add(dashboardPerfilVO);
        }
    }

    if (!existePerfilAlterar) {
        // Não existe um perfil que possa alterar
        errors.add("erro", new ActionMessage(
                "erro.sem.perfil.alterar.dashboard"));
    }
    dashboardVO.setPerfis(null);
    dashboardVO.setPerfis(perfis);

    Set<DashboardItemVO> itens = new HashSet<DashboardItemVO>();

    ArrayList<DashboardItemVO> itensDashboard = (ArrayList<DashboardItemVO>) request
            .getSession().getAttribute("itensDashboard");

    if (itensDashboard == null || itensDashboard.size() < 1) {
        // Deve existir ao menos um item
        errors.add("erro", new ActionMessage("erro.sem.item.dashboard"));
    } else {
        int ordem = 0;
        for (DashboardItemVO dashboardItemVO : itensDashboard) {
            dashboardItemVO.setOrdem(++ordem);
            dashboardItemVO.setDashboardVO(dashboardVO);
            for (DashboardItemSerieVO disVO : dashboardItemVO.getSeries()) {
                disVO.setDashboardItemVO(dashboardItemVO);
            }
            itens.add(dashboardItemVO);
        }
    }
    dashboardVO.setItens(null);
    dashboardVO.setItens(itens);

    if (!errors.isEmpty()) {

        request.setAttribute(Globals.ERROR_KEY, errors);
        return mapping.getInputForward();

    } else {

        if (dashboardForm.getIdDashboard() == null
                || dashboardForm.getIdDashboard().equals("")) {
            // Inclui o dashboard na base de dados
            dashboard.incluiDashboard(dashboardVO, sf.getCurrentSession());
            dashboardForm.setIdDashboard(String.valueOf(dashboardVO
                    .getIdDashboard()));
        } else {
            // Altera o dashboard na base de dados
            dashboard.mergeDashboard(dashboardVO, sf.getCurrentSession());
        }

        return mapping.findForward("sucesso");
    }
}
Hibernate: select dashboardv0_.SEQ_DASHBOARD as SEQ1_41_1_, dashboardv0_.DES_DASHBOARD as DES2_41_1_, dashboardv0_.IND_PUBLICO as IND3_41_1_, perfis1_.COD_DASHBOARD as COD1_41_3_, perfis1_.COD_DASHBOARD as COD1_3_, perfis1_.COD_PERFIL as COD2_3_, perfis1_.COD_DASHBOARD as COD1_44_0_, perfis1_.COD_PERFIL as COD2_44_0_, perfis1_.IND_CONSULTAR as IND3_44_0_, perfis1_.IND_ALTERAR as IND4_44_0_, perfis1_.IND_EXCLUIR as IND5_44_0_ from SGT_CM_DASHBOARD dashboardv0_ left outer join SGT_CM_DASHBOARD_PERFIL perfis1_ on dashboardv0_.SEQ_DASHBOARD=perfis1_.COD_DASHBOARD where dashboardv0_.SEQ_DASHBOARD=? order by perfis1_.COD_PERFIL
Hibernate: select dashboardv0_.SEQ_DASHBOARD as SEQ1_41_1_, dashboardv0_.DES_DASHBOARD as DES2_41_1_, dashboardv0_.IND_PUBLICO as IND3_41_1_, perfis1_.COD_DASHBOARD as COD1_41_3_, perfis1_.COD_DASHBOARD as COD1_3_, perfis1_.COD_PERFIL as COD2_3_, perfis1_.COD_DASHBOARD as COD1_44_0_, perfis1_.COD_PERFIL as COD2_44_0_, perfis1_.IND_CONSULTAR as IND3_44_0_, perfis1_.IND_ALTERAR as IND4_44_0_, perfis1_.IND_EXCLUIR as IND5_44_0_ from SGT_CM_DASHBOARD dashboardv0_ left outer join SGT_CM_DASHBOARD_PERFIL perfis1_ on dashboardv0_.SEQ_DASHBOARD=perfis1_.COD_DASHBOARD where dashboardv0_.SEQ_DASHBOARD=? order by perfis1_.COD_PERFIL
Hibernate: select dashboardv0_.SEQ_DASHBOARD as SEQ1_41_1_, dashboardv0_.DES_DASHBOARD as DES2_41_1_, dashboardv0_.IND_PUBLICO as IND3_41_1_, perfis1_.COD_DASHBOARD as COD1_41_3_, perfis1_.COD_DASHBOARD as COD1_3_, perfis1_.COD_PERFIL as COD2_3_, perfis1_.COD_DASHBOARD as COD1_44_0_, perfis1_.COD_PERFIL as COD2_44_0_, perfis1_.IND_CONSULTAR as IND3_44_0_, perfis1_.IND_ALTERAR as IND4_44_0_, perfis1_.IND_EXCLUIR as IND5_44_0_ from SGT_CM_DASHBOARD dashboardv0_ left outer join SGT_CM_DASHBOARD_PERFIL perfis1_ on dashboardv0_.SEQ_DASHBOARD=perfis1_.COD_DASHBOARD where dashboardv0_.SEQ_DASHBOARD=? order by perfis1_.COD_PERFIL
Hibernate: select dashboardv0_.SEQ_DASHBOARD as SEQ1_41_1_, dashboardv0_.DES_DASHBOARD as DES2_41_1_, dashboardv0_.IND_PUBLICO as IND3_41_1_, perfis1_.COD_DASHBOARD as COD1_41_3_, perfis1_.COD_DASHBOARD as COD1_3_, perfis1_.COD_PERFIL as COD2_3_, perfis1_.COD_DASHBOARD as COD1_44_0_, perfis1_.COD_PERFIL as COD2_44_0_, perfis1_.IND_CONSULTAR as IND3_44_0_, perfis1_.IND_ALTERAR as IND4_44_0_, perfis1_.IND_EXCLUIR as IND5_44_0_ from SGT_CM_DASHBOARD dashboardv0_ left outer join SGT_CM_DASHBOARD_PERFIL perfis1_ on dashboardv0_.SEQ_DASHBOARD=perfis1_.COD_DASHBOARD where dashboardv0_.SEQ_DASHBOARD=? order by perfis1_.COD_PERFIL
Hibernate: select dashboardv0_.SEQ_DASHBOARD as SEQ1_41_1_, dashboardv0_.DES_DASHBOARD as DES2_41_1_, dashboardv0_.IND_PUBLICO as IND3_41_1_, perfis1_.COD_DASHBOARD as COD1_41_3_, perfis1_.COD_DASHBOARD as COD1_3_, perfis1_.COD_PERFIL as COD2_3_, perfis1_.COD_DASHBOARD as COD1_44_0_, perfis1_.COD_PERFIL as COD2_44_0_, perfis1_.IND_CONSULTAR as IND3_44_0_, perfis1_.IND_ALTERAR as IND4_44_0_, perfis1_.IND_EXCLUIR as IND5_44_0_ from SGT_CM_DASHBOARD dashboardv0_ left outer join SGT_CM_DASHBOARD_PERFIL perfis1_ on dashboardv0_.SEQ_DASHBOARD=perfis1_.COD_DASHBOARD where dashboardv0_.SEQ_DASHBOARD=? order by perfis1_.COD_PERFIL
Hibernate: select dashboardv0_.SEQ_DASHBOARD as SEQ1_41_1_, dashboardv0_.DES_DASHBOARD as DES2_41_1_, dashboardv0_.IND_PUBLICO as IND3_41_1_, perfis1_.COD_DASHBOARD as COD1_41_3_, perfis1_.COD_DASHBOARD as COD1_3_, perfis1_.COD_PERFIL as COD2_3_, perfis1_.COD_DASHBOARD as COD1_44_0_, perfis1_.COD_PERFIL as COD2_44_0_, perfis1_.IND_CONSULTAR as IND3_44_0_, perfis1_.IND_ALTERAR as IND4_44_0_, perfis1_.IND_EXCLUIR as IND5_44_0_ from SGT_CM_DASHBOARD dashboardv0_ left outer join SGT_CM_DASHBOARD_PERFIL perfis1_ on dashboardv0_.SEQ_DASHBOARD=perfis1_.COD_DASHBOARD where dashboardv0_.SEQ_DASHBOARD=? order by perfis1_.COD_PERFIL
Hibernate: select dashboardv0_.SEQ_DASHBOARD as SEQ1_41_1_, dashboardv0_.DES_DASHBOARD as DES2_41_1_, dashboardv0_.IND_PUBLICO as IND3_41_1_, perfis1_.COD_DASHBOARD as COD1_41_3_, perfis1_.COD_DASHBOARD as COD1_3_, perfis1_.COD_PERFIL as COD2_3_, perfis1_.COD_DASHBOARD as COD1_44_0_, perfis1_.COD_PERFIL as COD2_44_0_, perfis1_.IND_CONSULTAR as IND3_44_0_, perfis1_.IND_ALTERAR as IND4_44_0_, perfis1_.IND_EXCLUIR as IND5_44_0_ from SGT_CM_DASHBOARD dashboardv0_ left outer join SGT_CM_DASHBOARD_PERFIL perfis1_ on dashboardv0_.SEQ_DASHBOARD=perfis1_.COD_DASHBOARD where dashboardv0_.SEQ_DASHBOARD=? order by perfis1_.COD_PERFIL
Hibernate: select dashboardv0_.SEQ_DASHBOARD as SEQ1_41_1_, dashboardv0_.DES_DASHBOARD as DES2_41_1_, dashboardv0_.IND_PUBLICO as IND3_41_1_, perfis1_.COD_DASHBOARD as COD1_41_3_, perfis1_.COD_DASHBOARD as COD1_3_, perfis1_.COD_PERFIL as COD2_3_, perfis1_.COD_DASHBOARD as COD1_44_0_, perfis1_.COD_PERFIL as COD2_44_0_, perfis1_.IND_CONSULTAR as IND3_44_0_, perfis1_.IND_ALTERAR as IND4_44_0_, perfis1_.IND_EXCLUIR as IND5_44_0_ from SGT_CM_DASHBOARD dashboardv0_ left outer join SGT_CM_DASHBOARD_PERFIL perfis1_ on dashboardv0_.SEQ_DASHBOARD=perfis1_.COD_DASHBOARD where dashboardv0_.SEQ_DASHBOARD=? order by perfis1_.COD_PERFIL
Hibernate: select dashboardv0_.SEQ_DASHBOARD as SEQ1_41_1_, dashboardv0_.DES_DASHBOARD as DES2_41_1_, dashboardv0_.IND_PUBLICO as IND3_41_1_, perfis1_.COD_DASHBOARD as COD1_41_3_, perfis1_.COD_DASHBOARD as COD1_3_, perfis1_.COD_PERFIL as COD2_3_, perfis1_.COD_DASHBOARD as COD1_44_0_, perfis1_.COD_PERFIL as COD2_44_0_, perfis1_.IND_CONSULTAR as IND3_44_0_, perfis1_.IND_ALTERAR as IND4_44_0_, perfis1_.IND_EXCLUIR as IND5_44_0_ from SGT_CM_DASHBOARD dashboardv0_ left outer join SGT_CM_DASHBOARD_PERFIL perfis1_ on dashboardv0_.SEQ_DASHBOARD=perfis1_.COD_DASHBOARD where dashboardv0_.SEQ_DASHBOARD=? order by perfis1_.COD_PERFIL
SEVERE: Servlet.service() for servlet [action] in context with path [/itauditor] threw exception [java.lang.reflect.UndeclaredThrowableException] with root cause java.lang.StackOverflowError