我已經創建了一個示例Web應用程序。我使用MS SQL Server 2008作爲數據庫和hibernate +註釋來訪問數據庫。我的休眠配置xml如下。 問題是,Criteria.list()返回一個空列表,而且我看到'?'在生成的HSQL中,而不是我在標準中傳遞的參數。Hibernate Criteria創建一個'?'在生成的SQL
<session-factory name="">
<property name="hibernate.connection.driver_class">sun.jdbc.odbc.JdbcOdbcDriver</property>
<property name="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</property>
<property name="hibernate.connection.url">jdbc:odbc:dbname</property>
<property name="connection.pool_size">10</property>
<property name="current_session_context_class">thread</property>
<!-- Disable the second-level cache -->
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
<!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property>
<property name="hibernate.connection.username"></property>
<property name="hibernate.connection.password"></property>
<mapping class="com.demo.Person" />
</session-factory>
這是我的註解豆
@Entity
@Table(name = "person")
public class Person implements Serializable {
public Person(){
}
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Basic(optional = false)
@Column(name = "personid")
private Integer personid;
@Basic(optional = false)
@Column(name = "firstname")
private String firstname;
@Column(name = "lastname")
private String lastname;
@Basic(optional = false)
@Column(name = "phone")
private String phone;
@Column(name = "mobile")
private String mobile;
@Column(name = "street")
private String street;
@Basic(optional = false)
@Column(name = "city")
private String city;
@Basic(optional = false)
@Column(name = "country")
private String country;
@Basic(optional = false)
@Column(name = "bussinessowner")
private int bussinessowner;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "resultid1")
private Collection<Recent> recentCollection;
//setters & getters
}
而我運行的代碼是
Session session;
List list = new ArrayList();
try{
session = HibernateUtil.getSessionFactory().openSession();
Criteria criteria = session.createCriteria(Person.class);
criteria.add(Restrictions.like("firstname", name, MatchMode.START));
list= criteria.list();
System.out.println(list.size());
}catch (Exception e) {
e.printStackTrace();
}
生成HSQL:
Hibernate: select this_.personid as personid2_0_, this_.city as city2_0_, this_.country as country2_0_, this_.firstname as firstname2_0_, this_.lastname as lastname2_0_ from person this_ where this_.firstname like ?
除此之外,我也沒有得到任何例外。你能幫我解決這個問題嗎? 謝謝!
代碼中似乎沒有錯誤。你是否手動將查詢寫入數據庫,是否返回任何結果? – NPKR
是的,如果我在管理工作室中執行查詢,它會返回結果。但在上面的代碼中,它返回的是空列表。 – Rakesh
「?」是準備好的聲明 - 這裏沒有錯誤。當你手動執行查詢時,你會替換什麼?「用? –