命名查询的sql语句的问题
2008-02-01 14:08
274 查看
import java.util.HashSet;
import java.util.Set;
public class Person ...{
private Long id;
private int age;
private String firstName;
private String lastName;
private Set events = new HashSet();
public Set getEvents() ...{
return events;
}
public void setEvents(Set events) ...{
this.events = events;
}
public int getAge() ...{
return age;
}
public void setAge(Integer age) ...{
this.age = age;
}
public String getFirstName() ...{
return firstName;
}
public void setFirstName(String firstName) ...{
this.firstName = firstName;
}
public Long getId() ...{
return id;
}
public void setId(Long id) ...{
this.id = id;
}
public String getLastName() ...{
return lastName;
}
public void setLastName(String lastName) ...{
this.lastName = lastName;
}
}
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.namequery.bean">
<class name="Person" table="HI_PERSON">
<id name="id" column="PERSON_ID">
<generator class="native" />
</id>
<property name="age" type="java.lang.Integer" />
<property name="firstName" column="fName">
</property>
<property name="lastName" column="lName" />
<set name="events" table="PERSON_EVENT">
<key column="PERSON_ID"></key>
<many-to-many column="EVENT_ID"
class="com.namequery.bean.Event" />
</set>
</class>
<query name="persons">
<![CDATA[
from Person
]]>
</query>
<sql-query name="mySqlQuery">
<return alias="p" class="Person" />
SELECT ...{p.*} FROM HI_PERSON p WHERE p.age=22
</sql-query>
</hibernate-mapping>
tx = session.beginTransaction();
List people = session.getNamedQuery("mySqlQuery").list();
问题是 本人开始写了
<sql-query name="mySqlQuery">
<return alias="p" class="Person" />
SELECT * FROM HI_PERSON p WHERE p.age=22
</sql-query>
报错误如下:
Hibernate: SELECT * FROM HI_PERSON p WHERE p.age=26
org.hibernate.exception.GenericJDBCException: could not execute query
at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:82)
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:70)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.loader.Loader.doList(Loader.java:1565)
at org.hibernate.loader.Loader.list(Loader.java:1545)
at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:103)
at org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1406)
at org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:151)
at com.namequery.NameQueryTest.main(NameQueryTest.java:30)
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: 列名 PERSON1_0_ 无效。
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerResultSet.findColumn(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getLong(Unknown Source)
若写成 <sql-query name="mySqlQuery">
<return alias="person" class="Person" />
SELECT {p.* } FROM HI_PERSON p WHERE p.age=22
</sql-query>
报
Hibernate: SELECT ...{p.*} FROM HI_PERSON p WHERE p.age=26
org.hibernate.exception.SQLGrammarException: could not execute query
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:59)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.loader.Loader.doList(Loader.java:1565)
at org.hibernate.loader.Loader.list(Loader.java:1545)
at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:103)
at org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1406)
at org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:151)
at com.namequery.NameQueryTest.main(NameQueryTest.java:30)
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: '.' 附近有语法错误。
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(Unknown Source)
<sql-query name="mySqlQuery">
<return alias="p" class="Person" />
SELECT p.AGE as {p.age} FROM HI_PERSON p WHERE p.age=26
</sql-query>
Hibernate: SELECT p.AGE as AGE5_0_ FROM HI_PERSON p WHERE p.age=26
org.hibernate.exception.GenericJDBCException: could not execute query
at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:82)
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:70)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.loader.Loader.doList(Loader.java:1565)
at org.hibernate.loader.Loader.list(Loader.java:1545)
at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:103)
at org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1406)
at org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:151)
at com.namequery.NameQueryTest.main(NameQueryTest.java:30)
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: 列名 PERSON1_0_ 无效。
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerResultSet.findColumn(Unknown Source)
只有改成
<sql-query name="mySqlQuery">
<return alias="p" class="Person" />
SELECT {p.*} FROM HI_PERSON p WHERE p.age=26
</sql-query>
才正确。
听别人说
<sql-query name="mySqlQuery">
<return alias="p" class="Person" />
SELECT p.AGE as {p.age} FROM HI_PERSON p WHERE p.age=26
</sql-query> 把所有的对应列写全了。也可以正确。
但本人没有去尝试
相关文章推荐
- sql查询语句性能问题及编写时需要注意的地方
- SQL语句实现查询一段时间内的数据中要注意的细节问题
- s2sh向数据库插入数据,控制台有打印sql语句,数据库查询不到数据问题
- 关于Hibernate在使用原生SQL语句多表查询所遇到的问题
- Oracle sql语句查询日期字段没有时分秒问题
- otl下直接用sql查询语句无法查询最新的记录的问题
- s2sh向数据库插入数据,控制台有打印sql语句,数据库查询不到数据问题
- ACCESS模糊查询like的解决方法&&SQL查询语句通配符问题
- 关于《一个SQL语句查询问题(查询最小值)(急)》回复里面没有正确理想的答案!
- 关于oracle sql语句查询时 表名和字段名要加双引號的问题具体解释
- 解决视图(SQL查询语句)唯一ID问题
- C# SQL语句参数化,通过包含like关键字的子句查询无结果问题
- 复杂或有趣的MDX问题求解(3)-SQL查询事实表与MDX语句查询的关系示例
- Sql server 数据库中,纯SQL语句查询、执行 单引号问题。
- Sql server 数据库中,纯SQL语句查询、执行 单引号问题。
- Hibernate原生SQL查询多表关联,SQL语句要注意的问题
- SQL反模式学习笔记18 减少SQL查询数据,避免使用一条SQL语句解决复杂问题
- 子查询sql语句及注意问题
- 关于oracle sql语句查询时 表名和字段名要加双引号的问题详解
- Hibernate原生SQL查询多表关联,SQL语句要注意的问题