2020-04-12 Registro de trabajo

1. Utilice la visualización de árbol de menú de tiempo de complemento de layui de terceros. (Dtree)

2. Use SpringDataJpa para uno a muchos, cuando la operación de guardado no se puede iniciar de manera perezosa una colección de roles, esto se debe a una carga lenta, la solución: agregue fetch = FetchType.EAGER a la anotación, si no se usa Tenga en cuenta que modifique lazy = "false" en el archivo de configuración.

3. Después de resolver la carga diferida, encontré nuevamente una excepción de puntero nulo. El error está apuntando a la anotación de datos de mi clase de entidad (uso lombok). Verifique la información y sepa que es la causa de lombok. Su anotación de datos incluye @ EqualsAndHashCode, esta anotación es falsa de forma predeterminada, no hereda el método equals y el método hashcode de la clase principal, por lo que causará que dos objetos sean incorrectos, la última solución, escribo manualmente set, método get o después de la anotación @Data Agregue un @EqualsAndHashCode (callsuper = true), (literalmente significa llamar a la clase padre jaja, primero entienda esto) lombok esto Escribiré una publicación separada.

4. Después de resolver el problema anterior, comencé a consultar y encontré nuevos problemas. Los datos que pregunté deben convertirse a json en el front-end, y luego comencé a informar el error de desbordamiento de la pila stackflowflow, porque el objeto se hace referencia infinitamente porque Almaceno la Lista <b> del objeto a, y el objeto a contenido en el objeto b, por lo que siempre me refiero al objeto y notifico un error. (Recurrencia infinita causada por referencias bidireccionales en objetos serializados json) Solución: use la etiqueta @JsonBackRerence en atributos con relación de muchos a uno o de muchos a muchos. (Si se menciona a json aquí, regrese a jaja, así que entiéndelo primero)

5. La cadena json pasada por el front end no puede ser recibida por el back end. Verificando el front end es la solicitud de carga útil. No la recibí usando request.getParammap (), así que verifiqué la información para encontrar dicho método:

    @RequestMapping ("/ roleMenuInsert / {roleId}" ) 
    @ResponseBody 
    public String roleMenuInsert (@PathVariable ("roleId" ) Id. Entero, solicitud HttpServletRequest) { 
        StringBuilder sb = new StringBuilder ();
        try (BufferedReader reader = request.getReader ();) {
             char [] buff = new  char [1024 ];
            int len;
            while ((len = reader.read (buff))! = -1 ) { 
                sb.append (buff, 0 , len); 
            } 
        } atrapar(IOException e) { 
            e.printStackTrace (); 
        } 
        System.out.println (sb.toString ()); 
        return sb.toString () 
    }

6, hibernar los pasos de la solución de operación en cascada de muchos a muchos, cuando se utiliza la modificación de uno a varios de la operación SpringDataJpa, el objeto de rol se guarda pero no surte efecto,

  Mi código original es

Rol role = roleService.findById (1); 
Menú menu = menuService.findById (1); 
// Quiero actualizar el menú al rol, 
Set <Menu> menuSet = new HashSet <> (); 
mentSet.add (menu) ; 
// Luego lo ejecuto, no tiene efecto, y la excepción de No desreferenciar una colección con cascade = "all-delete-orphan" 
role.setMenuS (menuset); 
roleService.save (role);

  Después de verificar la información, aprendí que para el conjunto de menús de roles, en sí mismo es una colección persistente. El conjunto existe en el grupo de objetos de hibernación. Después de role.setMenus (menuset), la referencia del rol a la colección de menús apunta al objeto Una colección fuera de la piscina. La solución final:

Rol role = roleService.findById (1); 
Menú menu = menuService.findById (1); 
// Quiero actualizar el menú al rol, 
Set <Menu> menuSet = new HashSet <> (); 
menuSet.add (menu) ; 
role.getMenus (). clear (); 
role.getMenus (). addAll (menuSet); // centrarse en esta línea 
roleService.save (role);

7. OrphanRemoval indica si el objeto de clave externa debe eliminarse cuando se elimina el objeto de clave principal. Generalmente, debe eliminarse de manera predeterminada, por lo que agregamos (orphanRemoval = false) true a @OneToMany para eliminar, eliminar el objeto modificado y hacer referencia Los objetos de clave externa también se eliminan. falso significa no eliminar, solo establece la referencia del objeto en nulo,

8. Al realizar la operación en cascada de SpringDataJpa, es necesario mantener las claves foráneas en ambos lados (se deben mantener las anotaciones en ambos lados)

 

Supongo que te gusta

Origin www.cnblogs.com/super-hu/p/12687868.html
Recomendado
Clasificación