Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Hibernate não faz update das categorias

public class CadastroDeProduto {

    public static void main(String[] args) {
        Categoria celulares = new Categoria("CELULARES");

        EntityManager em = JPAUtil.getEntityManager();
        em.getTransaction().begin();

        em.persist(celulares);
        celulares.setNome("XPTO");

        em.flush();
        em.clear();

        em.merge(celulares);
        celulares.setNome("1234");
        em.flush();

    }

}

Hibernate: create table produtos (id bigint generated by default as identity, nome varchar(255), dataCadastro date, descricao varchar(255), preco decimal(19,2), categoria_id bigint, primary key (id)) Hibernate: alter table produtos add constraint FKpj7kc6d7o1bjm6bu0mj6g450i foreign key (categoria_id) references produtos

Hibernate: insert into produtos (id, nome) values (null, ?) Hibernate: select categoria0_.id as id1_0_0_, categoria0_.nome as nome2_0_0_ from produtos categoria0_ where categoria0_.id=?

public class CategoriaDao {

private EntityManager em;

public CategoriaDao(EntityManager em) {
    this.em = em;
}

public void cadastrar(Categoria categoria) {
    this.em.persist(categoria);
}

public void atualizar(Categoria categoria) {
    this.em.merge(categoria);
}

}

@Entity @Table(name = "produtos") public class Categoria {

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

public Categoria(String nome) {
    this.nome = nome;
}

public Categoria() {

}

public String getNome() {
    return nome;
}

public void setNome(String xpto) {

}

}

@Entity
@Table(name = "produtos")
public class Produto {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String nome;
    private String descricao;
    private BigDecimal preco;
    private LocalDate dataCadastro = LocalDate.now();

    @ManyToOne
    private Categoria categoria;

    public Produto(String nome, String descricao, BigDecimal preco, Categoria categoria) {
        this.nome = nome;
        this.descricao = descricao;
        this.preco = preco;
        this.categoria = categoria;
    }

    public Produto() {

    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    public BigDecimal getPreco() {
        return preco;
    }

    public void setPreco(BigDecimal preco) {
        this.preco = preco;
    }
}
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.2"
             xmlns="http://xmlns.jcp.org/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd">

    <persistence-unit name="loja" transaction-type="RESOURCE_LOCAL">
        <properties>
            <property name="javax.persistence.jdbc.driver" value="org.h2.Driver"/>
            <property name="javax.persistence.jdbc.url" value="jdbc:h2:mem:loja"/>
            <property name="javax.persistence.jdbc.user" value="sa"/>
            <property name="javax.persistence.jdbc.password" value=""/>

            <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
            <property name="hibernate.show_sql" value="true"/>
            <property name="hibernate.hbm2ddl.auto" value="update"/>
        </properties>
    </persistence-unit>
</persistence>
1 resposta
solução!

Resolvido. Ajustei o método SetNome na classe Categoria.