2
respostas

Aplicação deleta tudo do banco e depois insere de novo.

Aconteceu duas vezes. Quando eu estou codificando e depois salvo, a aplicação deleta tudo do banco e depois insere os dados de novo, com isso acabo perdendo todos os dados da tabela CATEGORIA_PRODUTO. O que pode ser isso ? O erro que aparece no console:

out 18, 2018 10:50:49 PM org.apache.catalina.loader.WebappClassLoaderBase clearReferencesJdbc
ADVERTÊNCIA: The web application [projeto-jpa-2] registered the JDBC driver [com.mysql.jdbc.Driver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.
out 18, 2018 10:50:49 PM org.apache.catalina.loader.WebappClassLoaderBase clearReferencesThreads
ADVERTÊNCIA: The web application [projeto-jpa-2] appears to have started a thread named [Abandoned connection cleanup thread] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread:
 java.lang.Object.wait(Native Method)
 java.lang.ref.ReferenceQueue.remove(Unknown Source)
 com.mysql.jdbc.AbandonedConnectionCleanupThread.run(AbandonedConnectionCleanupThread.java:43)
out 18, 2018 10:50:52 PM org.apache.jasper.servlet.TldScanner scanJars
INFORMAÇÕES: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
out 18, 2018 10:50:52 PM org.apache.catalina.core.ApplicationContext log
INFORMAÇÕES: Spring WebApplicationInitializers detected on classpath: [br.com.caelum.Inicializador@52e3c701]
out 18, 2018 10:50:52 PM org.apache.catalina.core.ApplicationContext log
INFORMAÇÕES: Initializing Spring root WebApplicationContext
log4j:WARN No appenders could be found for logger (org.springframework.web.context.ContextLoader).
log4j:WARN Please initialize the log4j system properly.
Hibernate: alter table CATEGORIA_PRODUTO drop foreign key FK_jgqb7bd23ao1bve01puhx4kk1
Hibernate: alter table CATEGORIA_PRODUTO drop foreign key FK_n9ee2scdpw61aat56o8pp31ju
Hibernate: alter table Produto drop foreign key FK_k56l5p46fql44gawuecr3cx0w
Hibernate: drop table if exists CATEGORIA_PRODUTO
Hibernate: drop table if exists Categoria
Hibernate: drop table if exists Loja
Hibernate: drop table if exists Produto
Hibernate: create table CATEGORIA_PRODUTO (Produto_id integer not null, categorias_id integer not null) ENGINE=InnoDB
Hibernate: create table Categoria (id integer not null auto_increment, nome varchar(255), primary key (id)) ENGINE=InnoDB
Hibernate: create table Loja (id integer not null auto_increment, nome varchar(255), primary key (id)) ENGINE=InnoDB
Hibernate: create table Produto (id integer not null auto_increment, descricao TEXT not null, linkDaFoto varchar(255) not null, nome varchar(255) not null, preco double precision not null, loja_id integer, primary key (id)) ENGINE=InnoDB
Hibernate: alter table CATEGORIA_PRODUTO add constraint FK_jgqb7bd23ao1bve01puhx4kk1 foreign key (categorias_id) references Categoria (id)
Hibernate: alter table CATEGORIA_PRODUTO add constraint FK_n9ee2scdpw61aat56o8pp31ju foreign key (Produto_id) references Produto (id)
Hibernate: alter table Produto add constraint FK_k56l5p46fql44gawuecr3cx0w foreign key (loja_id) references Loja (id)
Hibernate: insert into Loja (nome) values (?)
Hibernate: insert into Loja (nome) values (?)
Hibernate: insert into Categoria (nome) values (?)
Hibernate: insert into Categoria (nome) values (?)
Hibernate: insert into Produto (descricao, linkDaFoto, loja_id, nome, preco) values (?, ?, ?, ?, ?)
Hibernate: insert into Produto (descricao, linkDaFoto, loja_id, nome, preco) values (?, ?, ?, ?, ?)
Hibernate: insert into Produto (descricao, linkDaFoto, loja_id, nome, preco) values (?, ?, ?, ?, ?)
Hibernate: insert into Produto (descricao, linkDaFoto, loja_id, nome, preco) values (?, ?, ?, ?, ?)
Hibernate: insert into Produto (descricao, linkDaFoto, loja_id, nome, preco) values (?, ?, ?, ?, ?)
Hibernate: select loja0_.id as id1_2_, loja0_.nome as nome2_2_ from Loja loja0_
Hibernate: select categoria0_.id as id1_1_, categoria0_.nome as nome2_1_ from Categoria categoria0_...

Classe Produto:

@Entity
public class Produto {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
    @NotEmpty
    private String nome;
    @NotEmpty
    private String linkDaFoto;

    @NotEmpty
    @Column(columnDefinition="TEXT")
    private String descricao;

    @Min(20)
    private double preco;


    @ManyToMany
    @JoinTable(name="CATEGORIA_PRODUTO")
    private List<Categoria> categorias = new ArrayList<>();


    @Valid
    @ManyToOne
    private Loja loja;


// gets e sets...
2 respostas

Fala ai Robson, tudo bem ?

Provavelmente você definiu no seu persistence.xml a estrategia de criação, que sempre que subir, irá recriar o banco.

Robson, boa tarde! Também estava tendo esse mesmo problema. Caso esteja utilizando o JPAConfigurator basta alterar a linha props.setProperty("hibernate.hbm2ddl.auto", "create-drop"); para props.setProperty("hibernate.hbm2ddl.auto", "create"), após criar as tabelas altere o create para update e comenta todas as linhas do método init na classe CriadorDeProdutos que o problema será resolvido. Lembrando que você deverá excluir o banco de dados e criar novamente para executar alterações . Caso o tomcat esteja inicializado quando realizar a alteração de create-drop para create ele irá deletar todas as tabelas do banco.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software