Solucionado (ver solução)
Solucionado
(ver solução)
13
respostas

Mostrando os pedidos do usuário# Estou tendo o seguintes erros#Ainda sem soluçao

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'pedidoRepository' defined in br.com.alura.mvc.mudi.repository.PedidoRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Cannot resolve reference to bean 'jpaMappingContext' while setting bean property 'mappingContext'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jpaMappingContext': Invocation of init method failed; nested exception is org.hibernate.AnnotationException: @OneToOne or @ManyToOne on br.com.alura.mvc.mudi.model.Pedido.user references an unknown entity: org.springframework.security.core.userdetails.User

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jpaMappingContext': Invocation of init method failed; nested exception is org.hibernate.AnnotationException: @OneToOne or @ManyToOne on br.com.alura.mvc.mudi.model.Pedido.user references an unknown entity: org.springframework.security.core.userdetails.User

Caused by: org.hibernate.AnnotationException: @OneToOne or @ManyToOne on br.com.alura.mvc.mudi.model.Pedido.user references an unknown entity: org.springframework.security.core.userdetails.User

13 respostas
solução!

Olá Leobaldo! Tudo bem?

Parece que você está tendo algum problema relacionado com o mapeamento das entidades, com o @OneToOne e @ManyToOne. Consegue me enviar seu código pra eu dar uma olhada?

Caso o projeto seja de algum curso, também peço que sinalize, pra eu conseguir te ajudar melhor.

Fico aguardando!

package br.com.alura.mvc.mudi.controller; import javax.validation.Valid;

import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.userdetails.User; import org.springframework.stereotype.Controller; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping;

import br.com.alura.mvc.mudi.dto.RequisicaoNovoPedido; import br.com.alura.mvc.mudi.model.Pedido; import br.com.alura.mvc.mudi.repository.PedidoRepository; import br.com.alura.mvc.mudi.repository.UserRepository;

@Controller @RequestMapping("pedido") public class PedidoController {

@Autowired
private PedidoRepository pedidoRepository;

@Autowired
private UserRepository userRepository;

@GetMapping("formulario")
public String formulario(RequisicaoNovoPedido requisicao) {
    return "pedido/formulario";
}

@PostMapping("novo")
public String novo(@Valid RequisicaoNovoPedido requisicao, BindingResult result) {
    if(result.hasErrors()) {
        return "pedido/formulario";
    }

    String username = SecurityContextHolder.getContext().getAuthentication().getName();

    User usuario = userRepository.findByUsername(username);
    Pedido pedido = requisicao.toPedido();
    pedido.setUser(usuario);
    pedidoRepository.save(pedido);
    return "redirect:/home";
}

}

package br.com.alura.mvc.mudi.model;

import java.math.BigDecimal; import org.springframework.security.core.userdetails.User; import java.time.LocalDate;

import javax.persistence.Entity; import javax.persistence.EnumType; import javax.persistence.Enumerated; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.ManyToOne;

@Entity public class Pedido {

@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

private String nomeProduto;
private BigDecimal valorNegociado;
private LocalDate dataDaEntrega;
private String urlProduto;
private String urlImagem;
private String descricao;

@Enumerated(EnumType.STRING)
private StatusPedido status;

@ManyToOne(fetch = FetchType.LAZY)
private User user;

public String getNomeProduto() {
    return nomeProduto;
}
public void setNomeProduto(String nomeProduto) {
    this.nomeProduto = nomeProduto;
}
public BigDecimal getValorNegociado() {
    return valorNegociado;
}
public void setValorNegociado(BigDecimal valorNegociado) {
    this.valorNegociado = valorNegociado;
}
public LocalDate getDataDaEntrega() {
    return dataDaEntrega;
}
public void setDataDaEntrega(LocalDate dataDaEntrega) {
    this.dataDaEntrega = dataDaEntrega;
}
public String getUrlProduto() {
    return urlProduto;
}
public void setUrlProduto(String urlProduto) {
    this.urlProduto = urlProduto;
}
public String getUrlImagem() {
    return urlImagem;
}
public void setUrlImagem(String urlImagem) {
    this.urlImagem = urlImagem;
}
public String getDescricao() {
    return descricao;
}
public void setDescricao(String descricao) {
    this.descricao = descricao;
}
public Long getId() {
    return id;
}
public void setId(Long id) {
    this.id = id;
}
public StatusPedido getStatus() {
    return status;
}
public void setStatus(StatusPedido status) {
    this.status = status;
}
public User getUser() {
    return user;
}
public void setUser(User user) {
    this.user = user;
}

}

package br.com.alura.mvc.mudi.model;

import javax.persistence.*; import java.util.List;

@Entity @Table(name = "users") public class User {

@Id
private String username;
private String password;
private Boolean enabled;

@OneToMany(cascade = CascadeType.ALL, mappedBy = "user", fetch = FetchType.LAZY)
private List<Pedido> pedidos;

public String getUsername() {
    return username;
}
public void setUsername(String username) {
    this.username = username;
}
public String getPassword() {
    return password;
}
public void setPassword(String password) {
    this.password = password;
}
public Boolean getEnabled() {
    return enabled;
}
public void setEnabled(Boolean enabled) {
    this.enabled = enabled;
}

}

package br.com.alura.mvc.mudi.repository;

import java.util.List;

import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository;

import br.com.alura.mvc.mudi.model.Pedido; import br.com.alura.mvc.mudi.model.StatusPedido;

@Repository public interface PedidoRepository extends JpaRepository<Pedido, Long> {

List<Pedido> findByStatus(StatusPedido status);
@Query("select p from Pedido p join p.user u where u.username = :username")
List<Pedido> findAllByUsuario(@Param("username")String username);

}

package br.com.alura.mvc.mudi.repository;

import br.com.alura.mvc.mudi.model.Pedido; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository;

import br.com.alura.mvc.mudi.model.User;

import java.util.List;

@Repository public interface UserRepository extends JpaRepository<User, String>{

User findByUsername(String username);

}

package br.com.alura.mvc.mudi.repository;

import br.com.alura.mvc.mudi.model.Pedido; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository;

import br.com.alura.mvc.mudi.model.User;

import java.util.List;

@Repository public interface UserRepository extends JpaRepository<User, String>{

User findByUsername(String username);

}

package br.com.alura.mvc.mudi.ConfigurationUrl;

import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; import org.springframework.security.core.userdetails.User; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.provisioning.InMemoryUserDetailsManager;

import javax.sql.DataSource;

import static org.springframework.security.core.userdetails.User.withDefaultPasswordEncoder;

@Configuration @EnableWebSecurity

public class WebSecurityconfig extends WebSecurityConfigurerAdapter {

@Autowired
private DataSource dataSource;

@Override
protected void configure(HttpSecurity http) throws Exception{
   http.authorizeRequests()
           .anyRequest().authenticated()
           .and()
           .formLogin(form -> form
                   .loginPage("/login")
                   .defaultSuccessUrl("/home", true)
                   .permitAll())
           .logout(sair -> sair.logoutUrl("/sair"))
           .csrf().disable();

} @Override protected void configure (AuthenticationManagerBuilder auth) throws Exception{ BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();

      // UserDetails user =
               //User.builder()
               //.username("bebezao")
               //.password(encoder.encode("bebezao"))
               //.roles("ADM")
               //.build();

 auth.jdbcAuthentication()
         .dataSource(dataSource)
         .passwordEncoder(encoder);
         //.withUser(user);

} }

Curso de Spring MVC: autenticação com Spring Security, API Rest e AJAX

ainda não conseguir reolver o problema ..

Oi Leobaldo!

Na sua classe Pedido, você está importando uma classe User direto do Spring, com esse import: import org.springframework.security.core.userdetails.User. Porém, para que seu relacionamento seja corretamente configurado, você precisa importar a classe do seu projeto, que você configurou.

Tenta apagar o import e ver se a IDE te ajuda, mostrando a classe correta, no pacote criado por você.

Espero ter ajudado, abraços e bons estudos!

olá eu apaguei porem o erro persiste .. na ide ele aponta para um erro na em pedidocontrolle Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Agora você precisa clicar onde está com erro e ver quais imports a IDE te sugere. Feito isso, você irá selecionar o import da classe que você mesmo criou. Assim, o relacionamento vai ser configurado corretamente.

Se não encontrar, tenta utilizar lá em cima na classe o seguinte import: import br.com.alura.mvc.mudi.model.User. Dessa forma, você está adicionando o import manualmente.