importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.context.ApplicationListener;importorg.springframework.context.event.ContextRefreshedEvent;importorg.springframework.stereotype.Component;importcom.projeto.principal.entity.User;importrepository.UserRepository;@ComponentpublicclassDataInicializrimplementsApplicationListener<ContextRefreshedEvent>{@AutowiredUserRepositoryuserRepository;@OverridepublicvoidonApplicationEvent(ContextRefreshedEventarg0){//Sempre vai rodar no inicio da aplicacaoUseruser=newUser();user.setEmail("[email removido]");user.setNome("Maria dos Sados");userRepository.save(user);}}
Darlan,
Não é exibido nenhum erro, nenhuma exceção…
L
lucas.sampaio
Você não disse em que tabela vai salvar.
Só anotou sua entidade com @Entity e faltou a anotação @Table("nome_da_tabela").
Se for isso mesmo, avisa aqui pra gente e se não for vai dando mais infos.
D
darlan_machado1 like
Quando a anotação @Table é omitida, o JPA utiliza o nome da classe como nome da tabela, sendo esta anotação desnecessária quando não há diferenças entre o nome da tabela e da classe.
J
jorge.david
Entao, no meu banco o Spring cria a tabela User conforme a entity.
Só nao entendo o pq nao insere os dados…
D
darlan_machado
Cara, sem log, é complicado.
Coloca a chamada ao metodo save do teu repository num try/catch capturando Exception e printa isso. Talvez esteja lançando, mas você está omitindo a captura da exceção.
J
jorge.david
Coloquei o try/catch na classe de inicialização dos dados. Porém, não gerou nenhuma exceção.
@ComponentpublicclassDataInicializrimplementsApplicationListener<ContextRefreshedEvent>{@AutowiredUserRepositoryuserRepository;@OverridepublicvoidonApplicationEvent(ContextRefreshedEventarg0){//Sempre vai rodar no inicio da aplicacaotry{Useruser=newUser();user.setEmail("[email removido]");user.setNome("Maria");userRepository.save(user);}catch(Exceptione){// TODO Auto-generated catch blocke.printStackTrace();}}}
Quando a aplicação esta subindo vi essa mensagem de propriedade não encontrada do Hibernate. Não sei se pode ter alguma coisa a ver.
Achei que isso só era válido pra colunas/atributos. Aprendi algo novo.
D
darlan_machado
Cara, então está gravando.
A questão é, só tem um MySQL rodando?
Você está acessando o correto?
É meio bizarro perguntar, mas… já vi acontecer de ter 2 instâncias rodando e ter esse comportamento.
D
darlan_machado1 like
Por isso eu frequento o guj, mais para aprender do que para ensinar.
J
jorge.david
Então Darlan,
Só tenho um MySQL mesmo rodando.
O estranho é que a tabela User ele cria normalmente conforme a Entidade (Via Spring Boot), só os dados da classe DataInicializr que não esta sendo inseridos.
D
darlan_machado
E a classe está rodando normalmente?
Por que não usa, ao invés dela, o arquivo data.sql?
L
lucas.sampaio
Outra coisa, não anotar a classe UserRepository.java com @Repository faz com que o Spring consiga gerenciar ela?
Já que você está injetando uma classe que teoricamente não esteja sendo gerenciada pelo Spring pode ser que ela esteja “vindo” nula.
D
darlan_machado
Se estiver no mesmo package e a configuração estiver certa, não deve haver problemas. Mas, seria bom checar isso
J
jorge.david
Coloquei essa notação tambem e não rolou…
O incrivel é nem dar mensagem de erro…
L
lucas.sampaio
Tem como subir pro github ?
Se sim, upa lá e manda o link a gente (falo por mim, mas com certeza o pessoal também vai ajudar) pode mandar um pull-request se encontrar o problema.
J
jorge.david
Segue o link do GitHub.
L
lucas.sampaio
Tô sem permissão pra mandar pull-requests.
Mas o que eu fiz foi:
Defini um padrão de pacotes. A anotação @SpringBootApplication precisa varrer
o projeto pra gerenciar as classes que você quer que ele gerencie pra você. Em
pacotes diferentes (como por exemplo com.projeto.principal e config) o Spring por padrão não enxerga, então você tem que dizer onde essas classes estão com o atributo scanBasePackages = “base.packages”. Ou seja, movi todos os pacotes que estavam fora de com.projeto.principal pra dentro dele. Por exemplo: com.projeto.principal.config e com.projeto.principal.repository e adicionei pro @SpringBootApplication(scanBasePackages = "com.projeto.principal") e em baixo dela adicionei a anotação @Entity(basePackages = "com.projeto.principal")
Adicionei o prefixo “tb_” nos nomes das tabelas pra evitar de sem querer
usar uma palavra reservada. Eu não tava conseguindo criar a tabela user no PostgreSQL.
Se liberar lá pra eu poder mandar pull-request é só avisar aqui que eu mando o que eu fiz.