获取Handler dispatch失败;嵌套异常是 java.lang.StackOverflowError

问题描述 投票:0回答:0

我有自引用表 nh_node 引用它自己。

我尝试遵循从父母JPA获取所有孩子和子孩子解决方案。

代码:

@javax.persistence.Entity
@lombok.Data
@lombok.EqualsAndHashCode(callSuper = false)
@javax.persistence.Table(name ="nh_node")
public class NodeEntity extends BaseEntity implements java.io.Serializable {
    private static final long serialVersionUID = 1L;

    
    private static final String NODE_GENERATOR = "node_generator";

    @javax.persistence.Id
    @javax.persistence.GeneratedValue(strategy =    javax.persistence.GenerationType.SEQUENCE, generator = NODE_GENERATOR)
    @javax.persistence.SequenceGenerator(name =NODE_GENERATOR, sequenceName = "node_id_sequence", allocationSize = 1)
    @javax.persistence.Column(name ="node_id")
    private java.lang.Long nodeId;

    @javax.persistence.Column(name ="node_name",length =32)
    private java.lang.String nodeName;

    @javax.persistence.OneToMany( cascade = CascadeType.ALL)
    @javax.persistence.JoinColumn(name ="node_id")
    private java.util.List<com.mt.retail.nodehierarchyservice.entity.NodeUserMappingEntity> nodeUsers;

    @javax.persistence.ManyToOne( cascade = CascadeType.ALL)
    @javax.persistence.JoinColumn(name ="node_category_id")
    private com.mt.retail.nodehierarchyservice.entity.NodeCategoryEntity nodeCategory;

    @javax.persistence.OneToMany(mappedBy = "parentNode", cascade = CascadeType.ALL)
    private java.util.List<com.mt.retail.nodehierarchyservice.entity.NodeEntity> childNodes;

    @javax.persistence.ManyToOne( cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    @javax.persistence.JoinColumn(name ="parent_node_id")
    private com.mt.retail.nodehierarchyservice.entity.NodeEntity parentNode;

    @javax.persistence.OneToMany( cascade = CascadeType.ALL)
    @javax.persistence.JoinColumn(name ="node_id")
    private java.util.List<com.mt.retail.nodehierarchyservice.entity.NodeNotificationDetailEntity> nodeNotificationDetails;

    @javax.persistence.Column(name ="tenant_id",nullable = true,length =10)
    private java.lang.Long tenantId;


    public java.lang.Long getNodeId() {
        return nodeId;
     }

    public java.lang.Long setNodeId(java.lang.Long  nodeId) {
        return this.nodeId = nodeId;
     }

    public java.lang.String getNodeName() {
        return nodeName;
     }

    public java.lang.String setNodeName(java.lang.String  nodeName) {
        return this.nodeName = nodeName;
     }

    public java.util.List<com.mt.retail.nodehierarchyservice.entity.NodeUserMappingEntity> getNodeUsers() {
        return nodeUsers;
     }

    public java.util.List<com.mt.retail.nodehierarchyservice.entity.NodeUserMappingEntity> setNodeUsers(java.util.List<com.mt.retail.nodehierarchyservice.entity.NodeUserMappingEntity>  nodeUsers) {
        return this.nodeUsers = nodeUsers;
     }

    public com.mt.retail.nodehierarchyservice.entity.NodeCategoryEntity getNodeCategory() {
        return nodeCategory;
     }

    public com.mt.retail.nodehierarchyservice.entity.NodeCategoryEntity setNodeCategory(com.mt.retail.nodehierarchyservice.entity.NodeCategoryEntity  nodeCategory) {
        return this.nodeCategory = nodeCategory;
     }

    public java.util.List<com.mt.retail.nodehierarchyservice.entity.NodeEntity> getChildNodes() {
        return childNodes;
     }

    public java.util.List<com.mt.retail.nodehierarchyservice.entity.NodeEntity> setChildNodes(java.util.List<com.mt.retail.nodehierarchyservice.entity.NodeEntity>  childNodes) {
        return this.childNodes = childNodes;
     }

    public com.mt.retail.nodehierarchyservice.entity.NodeEntity getParentNode() {
        return parentNode;
     }

    public com.mt.retail.nodehierarchyservice.entity.NodeEntity setParentNode(com.mt.retail.nodehierarchyservice.entity.NodeEntity  parentNode) {
        return this.parentNode = parentNode;
     }

    public java.util.List<com.mt.retail.nodehierarchyservice.entity.NodeNotificationDetailEntity> getNodeNotificationDetails() {
        return nodeNotificationDetails;
     }

    public java.util.List<com.mt.retail.nodehierarchyservice.entity.NodeNotificationDetailEntity> setNodeNotificationDetails(java.util.List<com.mt.retail.nodehierarchyservice.entity.NodeNotificationDetailEntity>  nodeNotificationDetails) {
        return this.nodeNotificationDetails = nodeNotificationDetails;
     }

    public java.lang.Long getTenantId() {
        return tenantId;
     }

    public java.lang.Long setTenantId(java.lang.Long  tenantId) {
        return this.tenantId = tenantId;
     }
    
    //returns all children to any level
    public List<NodeEntity> getAllChildren(){
        return getAllChildren(this);
    }

    //recursive function to walk the tree
    private List<NodeEntity> getAllChildren(NodeEntity parent){
        List<NodeEntity> allChildren = new ArrayList<>();

        for(NodeEntity child : childNodes){
            allChildren.add(child);
            allChildren.addAll(getAllChildren(child));
        }

服务中:

@Override
public NodeDTO getNodeByNodeId(Long nodeId) {
    Optional<NodeEntity> nodeEntity = nodehierarchyRepository.findById(nodeId);
    System.out.println(nodeEntity.get().getAllChildren());
    return null;
}

当我尝试检索节点子节点时,我收到“处理程序调度失败;嵌套异常是 java.lang.StackOverflowError”异常。

我能知道我的代码哪里出错了吗?

hibernate jpa lombok
© www.soinside.com 2019 - 2024. All rights reserved.