Fala pessoal, bom dia.
Estou enfrentando um problema com chaves composta em minha tabela. Tenho uma Tabela de Produtos onde a PK e composta por GRUPO, SUBGRUPO e EMBALAGEM.
Preciso ler um produto “X” qualquer.
Alguem tem ideia de como devo fazer?
Até agora consegui ir até o Banco de Dados:
public class HibernateSessionFactory {
private static Logger logger = Logger.getLogger(HibernateSessionFactory.class);
private static SessionFactory factory;
static{
Configuration configuration = new AnnotationConfiguration();
configuration.configure();
factory = configuration.buildSessionFactory();
}
public static Session getSession(){
logger.info("abrindo uma nova sessão");
return factory.openSession();
}
}
ir até minha tabela (eu fiz desta forma):
@Entity
@Table(name="eppro0a0")
public class ProdutoPrimario {
@EmbeddedId
private ProdutoComposto idDoProduto;
public ProdutoComposto getIdDoProduto() {
return idDoProduto;
}
public void setIdDoProduto(ProdutoComposto idDoProduto) {
this.idDoProduto = idDoProduto;
}
}
e
@SuppressWarnings("serial")
@Embeddable
class ProdutoComposto implements Serializable {
private Long grupo;
private Long subgrupo;
private Long embalagem;
public Long getEmbalagem() {
return embalagem;
}
public void setEmbalagem(Long embalagem) {
this.embalagem = embalagem;
}
public Long getGrupo() {
return grupo;
}
public void setGrupo(Long grupo) {
this.grupo = grupo;
}
public Long getSubgrupo() {
return subgrupo;
}
public void setSubgrupo(Long subgrupo) {
this.subgrupo = subgrupo;
}
}
e testar desta maneira…
public class TestaProdutoPrimarioDao {
public static void main(String[] args) {
Session session = HibernateSessionFactory.getSession();
Dao<ProdutoPrimario> produtoPrimarioDao = new Dao<ProdutoPrimario>(session, ProdutoPrimario.class);
ProdutoPrimario produtoPrimario = produtoPrimarioDao.load(10L);
System.out.println(produtoPrimario.getIdDoProduto());
}
}
só que o teste levanta esta exception:
10:35:28,951 WARN ConfigurationFactory:127 - No configuration found. Configuring ehcache from ehcache-failsafe.xml found in the classpath: jar:file:/C:/Documents%20and%20Settings/marcelosalvador/workspace/dovac/web/WEB-INF/lib/ehcache-1.2.jar!/ehcache-failsafe.xml
10:35:30,543 INFO HibernateSessionFactory:20 - abrindo uma nova sessão
10:35:30,684 INFO Dao:27 - lendoclass br.com.dovac.modelo.ProdutoPrimario com id 10
Exception in thread "main" org.hibernate.PropertyAccessException: could not get a field value by reflection getter of br.com.dovac.modelo.ProdutoComposto.grupo
at org.hibernate.property.DirectPropertyAccessor$DirectGetter.get(DirectPropertyAccessor.java:35)
at org.hibernate.tuple.AbstractComponentTuplizer.getPropertyValue(AbstractComponentTuplizer.java:58)
at org.hibernate.tuple.AbstractComponentTuplizer.getPropertyValues(AbstractComponentTuplizer.java:64)
at org.hibernate.tuple.PojoComponentTuplizer.getPropertyValues(PojoComponentTuplizer.java:76)
at org.hibernate.type.ComponentType.getPropertyValues(ComponentType.java:307)
at org.hibernate.type.ComponentType.getHashCode(ComponentType.java:158)
at org.hibernate.engine.EntityKey.generateHashCode(EntityKey.java:104)
at org.hibernate.engine.EntityKey.<init>(EntityKey.java:48)
at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:75)
at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:871)
at org.hibernate.impl.SessionImpl.load(SessionImpl.java:788)
at org.hibernate.impl.SessionImpl.load(SessionImpl.java:781)
at br.com.dovac.dao.Dao.load(Dao.java:28)
at br.com.dovac.executavel.TestaProdutoPrimarioDao.main(TestaProdutoPrimarioDao.java:16)
Caused by: java.lang.IllegalArgumentException
at sun.reflect.UnsafeFieldAccessorImpl.ensureObj(Unknown Source)
at sun.reflect.UnsafeObjectFieldAccessorImpl.get(Unknown Source)
at java.lang.reflect.Field.get(Unknown Source)
at org.hibernate.property.DirectPropertyAccessor$DirectGetter.get(DirectPropertyAccessor.java:32)
... 13 more
Acredito que eu tenha errado ao escrever a classe de produtos.
Alguém pode me dar uma ajuda por favor?