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;
}
}
<! 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 >
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>
报错误如下:
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>
报
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>
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> 把所有的对应列写全了。也可以正确。
但本人没有去尝试