Moja aplikacja nie chce wystartować JAVA SPRING BOOT

0

Cześć,

jako że zawsze tutaj znajdowałem osoby chcące pomóc, proszę o nią jeszcze raz. Mam problem z kodem - wali błędami i nie mogę zlokalizować przyczyny. Aplikacja mi się nie odpala. W załączeniu screen.

oto mój kod:


import BugTrackerr.enums.AuthorityName;
import lombok.Getter;
import lombok.NoArgsConstructor;

import javax.persistence.*;

@Entity
@NoArgsConstructor
@Getter
public class Authority {                                                *//podkresla mi authority*

   @Id
   @GeneratedValue
   Long id;

   @Column(nullable = false, unique = true)
   @Enumerated(EnumType.STRING)
   AuthorityName name;


   public Authority(AuthorityName nam) {
       this.name = name;
   }
}


klasa AuthorityRepository

package BugTrackerr.auth;

import BugTrackerr.enums.AuthorityName;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;

import java.util.Optional;

public interface AuthorityRepository extends JpaRepository<Authority, Long> {
   Authority findByName(AuthorityName name);
   @Query("select a from Person p join p.authorities a where p.username = :username order by a.authority")               *//podkreśla a.authority*
   Iterable<Authority> findAllByPersonUsername(String username);

   Optional<Authority> findByAuthority(String authority);
}



klasa Person


import lombok.Setter;
import org.hibernate.annotations.ColumnDefault;

import javax.persistence.*;
import java.util.HashSet;
import java.util.Set;

@Entity
@NoArgsConstructor
@Getter
@Setter
public class Person {                                    *//podkreśla mi Person*

   @Id
   @GeneratedValue
   Long id;

   @Column(nullable = false, unique = true)
   String username;

   @Column(nullable = false)
   String password;

   @Column(nullable = false)
   String name;

   @Column(nullable = false)
   @ColumnDefault(value = "true")
   Boolean enabled = true;

   @ManyToMany(cascade = CascadeType.MERGE)
   @JoinTable(name = "person_authorities",                                 *//podkreśla person_authorities*
           joinColumns = @JoinColumn(name = "person_id"),                       *//podkreśla person_id*
           inverseJoinColumns = @JoinColumn(name = "authority_id"))                 *//podkreśla authority_id*
   Set<Authority> authorities;

   public Person(String username, String password, String name) {
       this.username = username;
       this.password = password;
       this.name = name;
   }

   public void setPassword(String hashedPassword) {
   
   }

   public void setAuthorities(HashSet<Authority> authorities) {
   }
}



Person Controller 

package BugTrackerr.auth;

import org.springframework.security.access.annotation.Secured;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import javax.validation.Valid;

@Controller
@RequestMapping("/users")
public class PersonController {

   private final PersonService personService;

   public PersonController(PersonService personService) {
       this.personService = personService;
   }

   @GetMapping("/")
   @Secured("ROLE_USERS_TAB")
   ModelAndView index() {
       ModelAndView modelAndView = new ModelAndView("users/index");
       modelAndView.addObject("people", personService.findAllUsers());
       return modelAndView;
   }

   @GetMapping("/create")
   @Secured("ROLE_CREATE_USER")
   ModelAndView create() {
       ModelAndView modelAndView = new ModelAndView("users/create");
       modelAndView.addAllObjects("person", new Person());                     *podkreśla ())*
       return modelAndView;
   }

   @PostMapping(value = "/save")
   @Secured("ROLE_CREATE_USER")
   ModelAndView createNewUser(@Valid @ModelAttribute Person person) {
       ModelAndView modelAndView = new ModelAndView();

       personService.savePerson(person);
       modelAndView.setViewName("redirect:/people/");

       return modelAndView;

   }
}



Pozdrawiam :)

2

Przecież masz wyjasnione. addAllObjects ma tylko jeden wariant:

addAllObjects(Map<String,?> modelMap)

Twoje wywołanie nie pasuje do tej metody. Jak chcesz żeby to dzialalo?
PS
Nie mieszaj @NoArgsConstructor i konstruktora w kodzie :/

0

Nawiasem mówiąc, sporo literówek w kodzie.

public Authority(AuthorityName nam) {
        this.name = name;
    }

Nie dostajesz ostrzeżeń, że nam nigdy nie jest używane?

Jest też nie do końca sensownie:

import BugTrackerr.enums.AuthorityName;
import lombok.Getter;
import lombok.NoArgsConstructor;

import javax.persistence.*;

@Entity
@NoArgsConstructor
@Getter
public class Authority {                                                *//podkresla mi authority*

    @Id
    @GeneratedValue
    Long id;

    @Column(nullable = false, unique = true)
    @Enumerated(EnumType.STRING)
    AuthorityName name;

    public Authority(AuthorityName nam) {
        this.name = name;
    }
}

Z jednej strony masz enuma AuthorityName, z drugiej strony masz tabelkę - słownik na wartości tego enuma. Łączysz wady jednego z drugim - z jednej strony masz enuma, więc dodanie nowej wartości do słownika w bazie jest niemożliwe bez zmiany w kodzie, z drugiej strony masz tabelkę, której zawartość może się rozjechać z zawartością enuma jak będziesz coś w nim zmieniał (rozszerzał, zawężał) i może się pojawić problem, bo będziesz np. miał wartość która nie ma odpowiednika w słowniku w bazie. W dodatku masz jakieś ManyToMany między użytkownikami a tym słownikiem i generalnie nie wiadomo o co chodzi.

Prawdopodobnie dałoby się uprościć to na tyle, że nie byłoby potrzeby używania ManyToMany i pomocniczych tabelek. Mógłbyś zamiast słownika mieć przyporządkowania uprawnień do osoby (coś jak PersonAuthority), albo nawet całkiem wywalić tabelkę, zostawić sobie enum, a w tabelach trzymać jedynie array z przypisanymi uprawnieniami (niektóre bazy SQLowe implementują taki typ kolumny, niekiedy również dokumenty jako kolumny.

1 użytkowników online, w tym zalogowanych: 0, gości: 1