命名查询的sql语句的问题

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> 把所有的对应列写全了。也可以正确。

但本人没有去尝试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值