-1
我已经在其他地方搜索它,但我无法找到解决方案,解决了我的问题,我试图将JPQL
查询和列中的所有输入求和和在一个名为total
的列中提交并在插入后将此结果显示在一个JTextField中,我用不同的方式尝试过,但没有人给出正确的答案。这里是我的决心:Sum列值和保存在数据库JPA
public class ViewPedidos extends javax.swing.JInternalFrame {
private DAOManager manager;
private PedidoModel model;
private MySQLPedidoDAO mspdao;
private MySQLClienteDAO mscdao;
private MySQLProdutoDAO msprdao;
private List<Produto> produtos;
private List<Pedido> pedidos;
private Pedido ped;
private Produto pro;
private boolean editavel;
public void inserirDados(Pedido ped) {
DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
Date date = new Date();
System.out.println(dateFormat.format(date));
{ JTextField sets ...}
/*LINE GIVING THE ERROR UNDER!!! */
//float soma = mspdao.retornaSoma();
Double soma = mspdao.retornaSoma();
ped.setTotal(soma);
} }
MySQLPedidoDAO类:
public class MySQLPedidoDAO implements PedidoDAO {
public ConnectionFactory cf;
public MySQLPedidoDAO(ConnectionFactory cf) {
this.cf = cf;
}
/*
@Override
public float retornaSoma(){
cf.createEm().getTransaction().begin();
Query q = cf.createEm().createQuery("SELECT sum(valorTotal) from pedido");
float soma = (float) q.getSingleResult();
cf.createEm().getTransaction().commit();
cf.close();
return soma;
}*/
public Double retornaSoma(){
cf.createEm().getTransaction().begin();
Query q = cf.createEm().createQuery("SELECT sum(valorTotal) from pedido");
Double soma = (float) q.getSingleResult();
cf.createEm().getTransaction().commit();
cf.close();
return soma;
} }
Pedido类:
@Entity
@Table(name = "pedido")
public class Pedido implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column
@Temporal(javax.persistence.TemporalType.DATE)
private Date dataCadastro;
@Column
private String nomeProduto;
@Column
private int numControle;
@Column
private int quantidade;
@Column(precision=15, scale=7)
private float valorUnitario;
@Column
private Integer codCliente;
@Column(precision=15, scale=7)
private float valorTotal;
@Column
//private float total;
private Double total;
public Pedido() {
}
public Pedido(int numControle, Date dataCadastro, String nomeProduto, float valorUnitario, float valorTotal, int quantidade, int codCliente){
this.numControle = numControle;
this.dataCadastro = dataCadastro;
this.nomeProduto = nomeProduto;
this.valorUnitario = valorUnitario;
this.valorTotal = valorTotal;
this.quantidade = quantidade;
this.codCliente = codCliente;
}
{ getters and setters }
@Override
public String toString() {
return "Pedido" + "id=" + id + ", dataCadastro=" + dataCadastro + ", nomeProduto=" + nomeProduto + ", numControle=" + numControle + ", quantidade=" + quantidade + ", valorUnitario=" + valorUnitario + ", codCliente=" + codCliente + ", valorTotal=" + valorTotal + ", total=" + getTotal() + '\n';
}
/**
* @return the total
*/
public float getTotal() {
return total;
}
/**
* @param total the total to set
*/
public void setTotal(float total) {
this.total = total;
} }
它给了我这个错误主要类测试它:
Exception in thread "main" java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: pedido is not mapped [SELECT sum(valorTotal) from pedido]
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1750)
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1677)
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1683)
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:331)
at com.exemplo.repositorio.MySQLPedidoDAO.retornaSoma(MySQLPedidoDAO.java:115)
at com.exemplo.main.Main.retornaSoma(Main.java:117)
at com.exemplo.main.Main.main(Main.java:35)
Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: pedido is not mapped [SELECT sum(valorTotal) from pedido]
at org.hibernate.hql.internal.ast.QuerySyntaxException.generateQueryException(QuerySyntaxException.java:96)
at org.hibernate.QueryException.wrapWithQueryString(QueryException.java:120)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:234)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:158)
at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:126)
at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:88)
at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:190)
at org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:301)
at org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:236)
at org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:1796)
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:328)
... 3 more
Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: pedido is not mapped
at org.hibernate.hql.internal.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:189)
at org.hibernate.hql.internal.ast.tree.FromElementFactory.addFromElement(FromElementFactory.java:109)
at org.hibernate.hql.internal.ast.tree.FromClause.addFromElement(FromClause.java:95)
at org.hibernate.hql.internal.ast.HqlSqlWalker.createFromElement(HqlSqlWalker.java:331)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElement(HqlSqlBaseWalker.java:3633)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElementList(HqlSqlBaseWalker.java:3522)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromClause(HqlSqlBaseWalker.java:706)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:562)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:299)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:247)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:278)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:206)
... 11 more
并在ViewPedidos fo执行RM它给了我一个堆栈跟踪(毕竟,哪个对象上缺少呢??):
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at com.exemplo.view.ViewPedidos.inserirDados(ViewPedidos.java:580)
at com.exemplo.view.ViewPedidos.btInserirActionPerformed(ViewPedidos.java:406)
at com.exemplo.view.ViewPedidos.access$400(ViewPedidos.java:46)
at com.exemplo.view.ViewPedidos$5.actionPerformed(ViewPedidos.java:283)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6533)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
at java.awt.Component.processEvent(Component.java:6298)
at java.awt.Container.processEvent(Container.java:2236)
at java.awt.Component.dispatchEventImpl(Component.java:4889)
at java.awt.Container.dispatchEventImpl(Container.java:2294)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)
at java.awt.Container.dispatchEventImpl(Container.java:2280)
at java.awt.Window.dispatchEventImpl(Window.java:2746)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
at java.awt.EventQueue$4.run(EventQueue.java:731)
at java.awt.EventQueue$4.run(EventQueue.java:729)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
我已经尝试过申报与列表回报retornaSoma()函数,并把它在插入时,该功能已执行但未提交。
1)请使用**代码格式**(不是右侧按钮中可用的HTML/CSS/JS代码片段的格式),以获取代码和代码片段,结构化文档(如XML或输入/输出)。为此,请选择文本,然后单击邮件发布/编辑窗体顶部的** {}'按钮**。 2)请[编辑]问题来纠正这一问题。 –
您的实体被命名为Pedido,而不是Pedido。类名在JPQL中也是区分大小写的。 –
@JBNizet我已经把'Query q = cf.createEm()。createQuery(“SELECT sum(valorTotal)from Pedido”);'和'Double','float'我决定让'双'。现在唯一的问题是,我无法从这个函数中获取值并将其放在总变量中,但它没有记录该值(在调试后我修改了上面的解决方案) – Ito