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

Aula 5 - Mapeamento de chaves compostas

Ao realizar as alterações da aula, deu o seguinte erro na anotação @EmbeddedId na classe Categoria: Embedded Id class should include method definitions for equals() and hashcode()

Mesmo com o erro, tentei executar a classe de teste CadastroDeProduto, o qual deu o seguinte StackTrace:

Exception in thread "main" java.lang.IllegalArgumentException: org.hibernate.QueryException: could not resolve property: nome of: br.com.alura.loja1.modelo.Categoria [SELECT p FROM br.com.alura.loja1.modelo.Produto p WHERE p.categoria.nome = :nome] at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:138) at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:181) at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:188) at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:725) at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:816) at org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:23) at br.com.alura.loja1.dao.ProdutoDao.buscarPorNomeDaCategoria(ProdutoDao.java:54) at br.com.alura.loja1.testes.CadastroDeProduto.main(CadastroDeProduto.java:27) Caused by: org.hibernate.QueryException: could not resolve property: nome of: br.com.alura.loja1.modelo.Categoria [SELECT p FROM br.com.alura.loja1.modelo.Produto p WHERE p.categoria.nome = :nome] at org.hibernate.QueryException.generateQueryException(QueryException.java:120) at org.hibernate.QueryException.wrapWithQueryString(QueryException.java:103) at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:220) at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:144) at org.hibernate.engine.query.spi.HQLQueryPlan.(HQLQueryPlan.java:113) at org.hibernate.engine.query.spi.HQLQueryPlan.(HQLQueryPlan.java:73) at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:162) at org.hibernate.internal.AbstractSharedSessionContract.getQueryPlan(AbstractSharedSessionContract.java:604) at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:716) ... 4 more Caused by: org.hibernate.QueryException: could not resolve property: nome of: br.com.alura.loja1.modelo.Categoria at org.hibernate.persister.entity.AbstractPropertyMapping.propertyException(AbstractPropertyMapping.java:77) at org.hibernate.persister.entity.AbstractPropertyMapping.toType(AbstractPropertyMapping.java:71) at org.hibernate.persister.entity.AbstractEntityPersister.toType(AbstractEntityPersister.java:2043) at org.hibernate.hql.internal.ast.tree.FromElementType.getPropertyType(FromElementType.java:412) at org.hibernate.hql.internal.ast.tree.FromElement.getPropertyType(FromElement.java:520) at org.hibernate.hql.internal.ast.tree.DotNode.getDataType(DotNode.java:694) at org.hibernate.hql.internal.ast.tree.DotNode.prepareLhs(DotNode.java:269) at org.hibernate.hql.internal.ast.tree.DotNode.resolve(DotNode.java:209) at org.hibernate.hql.internal.ast.HqlSqlWalker.resolve(HqlSqlWalker.java:1053) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.expr(HqlSqlBaseWalker.java:1303) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.exprOrSubquery(HqlSqlBaseWalker.java:4771) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.comparisonExpr(HqlSqlBaseWalker.java:4237) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:2161) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.whereClause(HqlSqlBaseWalker.java:827) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:621) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:325) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:273) at org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:276) at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:192) ... 10 more

A classe Categoria está assim:

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

@EmbeddedId
private CategoriaId id;

public Categoria() {
}

public Categoria(String nome) {
    this.id = new CategoriaId(nome, "xpto");
}

public String getNome() {
    return this.id.getNome();
}

}

E a classe CategoriaId está assim:

@Embeddable public class CategoriaId implements Serializable { private static final long serialVersionUID = 1L;

private String nome;
private String tipo;

public CategoriaId() {
}

public CategoriaId(String nome, String tipo) {
    this.nome = nome;
    this.tipo = tipo;
}

//getters e setters

}

Código a princípio, tá igual do prof. Se puderem me ajudar a achar onde está o meu erro, agradeço.

1 resposta
solução!

Problema solucionado no vídeo de conclusão do curso. Obrigado!