Java RuntimeException:org.hibernate.exception.sqlgrammareException:无法执行查询
我正在使用另一个表联接从一个名为PurchaseDetailContributor的表中检索记录。但我得到的查询错误 下面是我的DAOHibernate.java类,我在其中编写了一个方法Java RuntimeException:org.hibernate.exception.sqlgrammareException:无法执行查询,java,mysql,sql,hibernate,Java,Mysql,Sql,Hibernate,我正在使用另一个表联接从一个名为PurchaseDetailContributor的表中检索记录。但我得到的查询错误 下面是我的DAOHibernate.java类,我在其中编写了一个方法 @SuppressWarnings("unchecked") public List<PurchaseDetailContributor> getPurchaseDetailContributorByCustomerNo(Integer customer_no) { System.out.
@SuppressWarnings("unchecked")
public List<PurchaseDetailContributor> getPurchaseDetailContributorByCustomerNo(Integer customer_no) {
System.out.println("The Customer number in PurchaseDetailContributorDAOHIbernate >>>>" + customer_no);
String sql = " SELECT * FROM purchase_detail_contributor pdc "
+ " INNER JOIN purchasedetail pd ON pdc.purchase_detail_id = pd.purchasedetailid "
+ " INNER JOIN purchase p ON pd.purchasefk = p.purchaseid "
+ " INNER JOIN user u ON u.userid = p.userid AND u.customer_no = " +customer_no;
List<PurchaseDetailContributor> pdcList = new ArrayList<PurchaseDetailContributor>();
Transaction tx = null;
Session session = getHibernateTemplate().getSessionFactory().openSession();
try{
tx = session.beginTransaction();
SQLQuery sqlQuery = session.createSQLQuery(sql).addEntity(PurchaseDetailContributor.class);
//sqlQuery.setInteger("customer_no", customer_no);
pdcList = sqlQuery.list();
tx.commit();
}catch (RuntimeException e) {
System.out.println("getPurchaseDetailContributorByCustomerNo() >>>>- RuntimeException: " + e);
if (tx != null && tx.isActive()) {
try {
// Second try catch as the rollback could fail as well
tx.rollback();
} catch (HibernateException e1) {
System.out.println("Error rolling back transaction: " + e1);
}
}
} finally {
session.disconnect();
}
sql中没有空格
String sql = "select * from purchase_detail_contributor"
+ "inner join purchasedetail on (purchase_detail_contributor.purchase_detail_id = purchasedetail.purchasedetailid)"
+ "inner join purchase on (purchasedetail.purchasefk = purchase.purchaseid)"
+ "inner join user on (user.userid = purchase.userid)"
+ "where user.customer_no = :customer_no";
所以sql是
select * from purchase_detail_contributorinner join purchasedetail...
这肯定是语法错误sql中没有空格
String sql = "select * from purchase_detail_contributor"
+ "inner join purchasedetail on (purchase_detail_contributor.purchase_detail_id = purchasedetail.purchasedetailid)"
+ "inner join purchase on (purchasedetail.purchasefk = purchase.purchaseid)"
+ "inner join user on (user.userid = purchase.userid)"
+ "where user.customer_no = :customer_no";
所以sql是
select * from purchase_detail_contributorinner join purchasedetail...
这肯定是语法错误您发布了正确的代码吗 正如它所显示的错误
11:13:01,074 ERROR [JDBCExceptionReporter:234] Column 'is_approved' not found.
你发了正确的代码吗 正如它所显示的错误
11:13:01,074 ERROR [JDBCExceptionReporter:234] Column 'is_approved' not found.
添加“内部联接”和“where”子句时需要一些空格,否则sql将类似于“select*from PUSHARE\u detail\u contributorinner join…”,谢谢,现在我按照大家的建议更改了sql查询,但仍然出现以下错误org.hibernate.exception.sqlgrammareexception:无法执行查询您可以在提交sql并将其添加到问题之前打印您的sql吗?我不明白您的意思……请您修改我代码中的错误。以帮助我们理解可能出现什么问题,您可以添加一些信息吗?例如,完整的stacktrace和/或sql变量的值?在添加“内部联接”和“where”子句时,您需要一些空格,否则您的sql将类似于“select*from purchase\u detail\u contributorinner join…”,谢谢,现在我按照大家的建议更改了sql查询,但仍然出现以下错误org.hibernate.exception.sqlgrammareexception:无法执行查询您可以在提交sql并将其添加到问题之前打印您的sql吗?我不明白您的意思……请您修改我代码中的错误。以帮助我们理解可能出现什么问题,您可以添加一些信息吗?例如,完整的stacktrace和/或sql变量的值?创建查询时,必须始终设置参数,如
user.customer\u no=:cno
,然后调用setParameter(“cno”,customer\u no)
,以防sql注入攻击。这个更安全,因为它是一个整数对象,但是如果你在一个地方这样做,可以安全地假设你在更多地方这样做。创建查询时,你必须始终设置参数,如user.customer\u no=:cno
,然后调用setParameter(“cno”,customer\u no)
以防止SQL注入攻击。这一个更安全,因为它是一个整数对象,但是如果你在一个地方这样做,可以安全地假设你在更多地方这样做。