作者lueichun (= =)
看板java
标题[问题] Hibernate的getSession().createSQLQuery
时间Sat Jan 16 17:47:23 2021
※状况概述:
我尝试用Hibernate做一些简单的inner join查询,不过下的SQL必须是符合某特定形式
才能正常运作。例如:
public class TestDao extends HibernateDaoSupport {
query = getSession().createSQLQuery(
"select c1.*,c2.* from Customer c1
inner join Country c2 on c1.country_id=c2.country_id where c1.name=:name");
query.setParameter("name", name);
query.addEntity(Customer.class).addEntity(Country.class);
list = query.list();
return list;
但如果把上面SQL的星号改成栏位名称,就会跳错,例如改成:
select c1.name,c2.country_name from Customer c1 inner join Country c2 on
c1.country_id=c2.country_id where c1.name=:name
执行到
list = query.list();
就会跳以下的错误讯息:
※错误讯息:
[org.hibernate.exception.GenericJDBCException: could not execute query] with
root cause
java.sql.SQLException: 资料栏名称无效
这样就变成每次查询都要捞出全部资料才可以,显得很多余,但是又想不到如何修改
请问为何SQL打星号可以过,打栏位名称就过不了呢?
那又要如何修改呢?
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 1.167.40.4 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/java/M.1610790445.A.736.html
改写成以下这样即可:
query =
hibernateTemplate.getSessionFactory().openSession().createSQLQuery(
"select name,(select country_name from Country c1 inner join Customer c2 on
c1.country_id=c2.country_id where name=:name) country_name from Customer c3");
//将addEntity那行改成以下写法:
query.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP);
list = query.list();
return list;
※ 编辑: lueichun (1.167.40.18 台湾), 01/17/2021 14:12:41
1F:推 Jichang: 如果是写column name的 是要用 native sql 和jpql不同 01/22 13:06