我想使用下面的代码运行一个mysql sql语句;insertupdate sql mysql和jpa实体
public void createUpdate(Tsaleline entity) {
//Insert
String sql = "Insert into tSaleLine (CenterId, ProductId, Price, VATRate) "
+ "Select :centerId, :productId, :price, :vatrate "
+ "where (Select count(*) from tSaleLine where CenterId = :centerId and ProductId = :productId)=0; "
//Update
+ "Update tSaleLine "
+ "set CenterId = :centerId, "
+ "ProductId = :productId, "
+ "Price = :price, "
+ "VATRate = :vatrate "
+ "where CenterId = :centerId and ProductId = :productId; ";
Query q = getEntityManager().createNativeQuery(sql);
q.setParameter("centerId", entity.getCenterId())
.setParameter("productId", entity.getProductId())
.setParameter("price", entity.getPrice())
.setParameter("vatrate", entity.getVATRate())
.executeUpdate();
}
}
但它上升一个错误:
例外
org.apache.jasper.JasperException:javax.ejb.EJBException异常:javax.persistence.PersistenceException:org.hibernate作为.exception.SQLGrammarException:无法执行本地批量操作查询
我想检查记录与给定的“CenterId”和“ProductId”,如果它存在给定的数据应该更新,如果没有插入。 在这种情况下,我认为我应该改变喜欢的地方“不存在(...” – 2011-05-17 16:46:40
我编辑了我的答案以反映您的需求。是否有理由不使用您的JPA实现方法来执行此操作?IE Hibernate saveOrUpdate()方法 – Marcelo 2011-05-17 16:54:22
这是一个带有产品价格信息的交叉引用表,我没有全部记录的主键 – 2011-05-17 17:04:15