2017-10-04 399 views
2

我的查詢是:休眠,無法執行查詢,SQL錯誤:17059,SQLSTATE:99999

@Query(value = "select * from Person where ID=?1 and NAME=?2", nativeQuery = true) 
List<Person> getPersonID(Integer id, String name); 

我的日誌:

select 
     * 
    from 
     Person 
    where 
     ID=? 
     and NAME=? 
2017-10-04 08:43:45.255 TRACE 8860 --- [nio-8080-exec-1] o.h.type.descriptor.sql.BasicBinder  : binding parameter [1] as [INTEGER] - [25] 
2017-10-04 08:43:45.255 TRACE 8860 --- [nio-8080-exec-1] o.h.type.descriptor.sql.BasicBinder  : binding parameter [2] as [VARCHAR] - [Julian] 


java.sql.SQLException: Fail to convert to internal representation 
    at oracle.jdbc.driver.CharCommonAccessor.getInt(CharCommonAccessor.java:123) ~[ojdbc7-12.1.0.2.jar:12.1.0.2.0] 
    at oracle.jdbc.driver.T4CVarcharAccessor.getInt(T4CVarcharAccessor.java:524) ~[ojdbc7-12.1.0.2.jar:12.1.0.2.0] 
    at oracle.jdbc.driver.GeneratedStatement.getInt(GeneratedStatement.java:217) ~[ojdbc7-12.1.0.2.jar:12.1.0.2.0] 
    at oracle.jdbc.driver.GeneratedScrollableResultSet.getInt(GeneratedScrollableResultSet.java:573) ~[ojdbc7-12.1.0.2.jar:12.1.0.2.0] 
    at oracle.jdbc.driver.GeneratedResultSet.getInt(GeneratedResultSet.java:1350) ~[ojdbc7-12.1.0.2.jar:12.1.0.2.0] 
    at org.hibernate.type.descriptor.sql.IntegerTypeDescriptor$2.doExtract(IntegerTypeDescriptor.java:62) ~[hibernate-core-5.0.9.Final.jar:5.0.9.Final] 
    at org.hibernate.type.descriptor.sql.BasicExtractor.extract(BasicExtractor.java:47) ~[hibernate-core-5.0.9.Final.jar:5.0.9.Final] 
    at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:238) ~[hibernate-core-5.0.9.Final.jar:5.0.9.Final] 
    at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:234) ~[hibernate-core-5.0.9.Final.jar:5.0.9.Final] 
    at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:224) ~[hibernate-core-5.0.9.Final.jar:5.0.9.Final] 
    at org.hibernate.type.AbstractStandardBasicType.hydrate(AbstractStandardBasicType.java:300) ~[hibernate-core-5.0.9.Final.jar:5.0.9.Final] 
    at org.hibernate.persister.entity.AbstractEntityPersister.hydrate(AbstractEntityPersister.java:2727) ~[hibernate-core-5.0.9.Final.jar:5.0.9.Final] 
    at org.hibernate.loader.Loader.loadFromResultSet(Loader.java:1729) ~[hibernate-core-5.0.9.Final.jar:5.0.9.Final] 
    at org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1655) ~[hibernate-core-5.0.9.Final.jar:5.0.9.Final] 
    at org.hibernate.loader.Loader.getRow(Loader.java:1544) ~[hibernate-core-5.0.9.Final.jar:5.0.9.Final] 
    at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:727) ~[hibernate-core-5.0.9.Final.jar:5.0.9.Final] 
    at org.hibernate.loader.Loader.processResultSet(Loader.java:972) ~[hibernate-core-5.0.9.Final.jar:5.0.9.Final] 
    at org.hibernate.loader.Loader.doQuery(Loader.java:930) ~[hibernate-core-5.0.9.Final.jar:5.0.9.Final] 
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:336) ~[hibernate-core-5.0.9.Final.jar:5.0.9.Final] 

我的實體:

@Entity 
@Table(name = "PERSON") 
public class Person { 

    @Id 
    @Column(name = "ID") 
    private Integer id; 

    @Column(name = "NAME") 
    private String name; 

    @Column(name = "BIRTHDAY") 
    private Date birthday; 

    @Column(name = "SIZE") 
    private Integer size; 

    public Integer getId() { 
     return id; 
    } 

    public void setId(Integer id) { 
     this.id = id; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public Date getBirthday() { 
     return birthday; 
    } 

    public void setBirthday(Date birthday) { 
     this.birthday = birthday; 
    } 

    public Integer getSize() { 
     return size; 
    } 

    public void setSize(Integer size) { 
     this.size = size; 
    } 

如果我嘗試我的查詢在SQL開發工作正常。 這似乎是我的數據類型不匹配,但我檢查了一切,我所有的數據類型都是正確的。

有沒有人遇到和我一樣的問題,可以幫忙嗎? 或有任何人知道可能是什麼問題?

在此先感謝!

+0

可能是駕駛員不匹配?你使用的是什麼版本的oracle? – shinjw

+0

你也可以發佈你的Person類實體嗎? – pleft

+0

我的Oracle版本是:11.2.0.4.0 –

回答

2

我不會執行原生查詢,因爲select *可能會引入綁定問題。您必須選擇每個字段,或者如上所述使用HQL查詢。

+0

肯定這提供了一個答案:select *可能會引入一個結果綁定問題,可能名稱不規則地綁定到id。這就是爲什麼他不應該使用本地查詢,而是使用HQL查詢,例如'從p中選擇p,其中p.id =?1和p.name =?2'.至少值得一試。 – uvo