【发布时间】:2012-10-12 09:13:20
【问题描述】:
我创建了一个示例 Web 应用程序。我使用 MS SQL Server 2008 作为数据库并使用 hibernate + 注释来访问数据库。我的休眠配置xml如下。 问题是,Criteria.list() 返回一个空列表,而且我看到一个“?”在生成的 HSQL 中,而不是我在 Criteria 中传递的参数。
<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 ?
除此之外,我也没有遇到任何异常。你能帮我解决这个问题吗? 谢谢!
【问题讨论】:
-
代码似乎没有错误。您是否检查过手动将查询写入数据库,它是否返回任何结果?
-
是的,如果我在管理工作室执行查询,它会返回结果。但在上面的代码中,它返回的是空列表。
-
"?"用于准备好的语句 - 这里没有错误。当您手动执行查询时,您用什么替换“?”与?
-
?只是name的值作为参数传递给 JDBC 驱动程序的标志(因为它应该是!)而不是直接在SQL 子句。我怀疑退货清单为空的原因是别的。 -
好的,但是如果我在管理工作室中执行相同的查询,那么我就能得到结果。我还缺少其他东西吗?
标签: java hibernate annotations sql-server-2008-r2