Fala aê galera. Seguinte, estou com um problema e não estou conseguindo resolver.
Tenho 3 entidades:
- Nota;
- Item;
- Cliente.
Nota
@Entity
@Table(name="nota")
@NamedQuery(name="fatBruto", query="select nf.notaPK.cliente.nomeFantasia, sum(nf.itens.total) from Nota nf join nf.notaPK.cliente join nf.itens where nf.data>=:dataInicial and nf.data<:dataFinal group by nf.notaPK.cliente.nomeFantasia")
public class Nota implements Serializable{
@EmbeddedId
private NotaPK notaPK;
@Column(name="data")
private Date data;
@OneToMany(fetch=FetchType.EAGER, cascade={CascadeType.ALL})
private List<Item> itens = new ArrayList<Item>();
@Transient
private Float totalNFLiquido;
@Transient
private Float totalNFBruto;
NotaPK
@Embeddable
public class NotaPK implements Serializable{
private Integer numero;
private Integer serie;
@ManyToOne
@JoinColumn(name="cod_cli")
private Cliente cliente;
Cliente
@Entity
@Table(name="cliente")
public class Cliente implements Serializable{
@Id
private Long codigo;
@Column(name="razaosocial", length=70)
private String razaoSocial;
@Column(name="nomefantasia", length=70)
private String nomeFantasia;
@Column(name="uf", length=2)
private String uf;
@Column(name="pais", length=30)
private String pais;
Item
@Entity
@Table(name="item")
public class Item implements Serializable{
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Integer id;
@Column(name="coditem", length=20)
private String coditem;
@Column(name="quant", length=20, precision=3)
private Float quantidade;
@Column(name="ipi", length=20, precision=2)
private Float ipi;
@Column(name="icms", length=20, precision=2)
private Float icms;
@Column(name="pis", length=20, precision=2)
private Float pis;
@Column(name="cofins", length=20, precision=2)
private Float cofins;
@Column(name="outros", length=20, precision=2)
private Float outros;
@Column(name="total", length=20, precision=2)
private Float total;
@Column(name="elementopep", length=20)
private String elementoPEP;
@Transient
private Float liquido;
Ao executar dá esse erro:
14:03:55,301 ERROR SessionFactoryImpl:435 - Error in named query: fatBruto
org.hibernate.QueryException: illegal attempt to dereference collection [(nota0_.cod_cli, nota0_.numero, nota0_.serie).itens] with element property reference [total] [select nf.notaPK.cliente.nomeFantasia, sum(nf.itens.total) from net.weg.bi.modelo.Nota nf join nf.notaPK.cliente join nf.itens where nf.data>=:dataInicial and nf.data<:dataFinal group by nf.notaPK.cliente.nomeFantasia]
at org.hibernate.hql.ast.tree.DotNode$1.buildIllegalCollectionDereferenceException(DotNode.java:68)
at org.hibernate.hql.ast.tree.DotNode.checkLhsIsNotCollection(DotNode.java:558)
at org.hibernate.hql.ast.tree.DotNode.resolve(DotNode.java:243)
at org.hibernate.hql.ast.tree.FromReferenceNode.resolve(FromReferenceNode.java:117)
at org.hibernate.hql.ast.tree.FromReferenceNode.resolve(FromReferenceNode.java:113)
at org.hibernate.hql.ast.HqlSqlWalker.resolve(HqlSqlWalker.java:868)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.expr(HqlSqlBaseWalker.java:1323)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.aggregateExpr(HqlSqlBaseWalker.java:3189)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.functionCall(HqlSqlBaseWalker.java:2548)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectExpr(HqlSqlBaseWalker.java:2129)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectExprList(HqlSqlBaseWalker.java:1983)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectClause(HqlSqlBaseWalker.java:1515)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:586)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:294)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:237)
at org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:254)
at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:185)
at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:136)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:101)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:80)
at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:98)
at org.hibernate.impl.SessionFactoryImpl.checkNamedQueries(SessionFactoryImpl.java:562)
at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:424)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1385)
at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:954)
at net.weg.bi.util.HibernateUtil.<clinit>(HibernateUtil.java:12)
at net.weg.bi.dao.hibernate.HibernateDAOFactory.<init>(HibernateDAOFactory.java:16)
at net.weg.bi.dao.DAOFactory.getDAOFactory(DAOFactory.java:9)
at net.weg.bi.controle.NotaControle.fatBruto(NotaControle.java:30)
at net.weg.bi.testes.NotaTestes.main(NotaTestes.java:111)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1385)
at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:954)
at net.weg.bi.util.HibernateUtil.<clinit>(HibernateUtil.java:12)
... 4 more
Eu preciso saber o total das notas por cliente.
Se eu trocar o sum(nf.itens.total) para count(nf), a query me retorna a quantidade de notas, mas não é isso que preciso…
Alguém já passou por isso?