2

我需要从表中获取单个单元格值。我正在将休眠与 Spring MVC 一起使用。

我做的是:

Session s = getSessionFactory().getCurrentSession();  
query q= s.createQuery("select xxx from abc where asd=:asd");

现在,我需要将这个单个值保存到一个字符串变量中,并且需要使用这个字符串变量与使用<c:choose> <c:when> <c:otherwise>标签的jsp页面中的其他字符串进行比较......

这就是我现在所拥有的。。

@Transactional
public String getUseNis(String code) {
Session s = getSessionFactory().getCurrentSession();
Query q = s.createQuery("select useNis from tle_location where code = :code");
q.setString("code", code);
String result = (String) q.uniqueResult();
return result; 

我需要在jsp页面中使用返回值来检查是或否...如何将它传递给我的jsp页面..

4

3 回答 3

5

要获得单个结果,请使用getFirstResult()getSingleResult()请注意,由于以下原因,两者都不是特别有用:

  • 调用getFirstResult()将返回查询返回的集合中的第一个元素,该元素可能是也可能不是您要查找的元素。
  • 调用期望getUniqueResult()查询只返回 一项,如果返回的集合为空或有多个条目,则引发异常。

与 的插图uniqueResult()

//sessionFactory = getHibernateTemplate().getSessionFactory();
Session session = getSessionFactory().getCurrentSession();
Query query = session.createQuery("select value from table where ...");
query.setParameters("param1", value1);
result = (Type) query.uniqueResult(); //The type is you desired result type.
//test for null here if needed

确保查询只返回一个结果。它将抛出NonUniqueResultException- 如果找到多个匹配结果(因此query.setMaxResults(1);会更合适)。

http://www.java2s.com/Code/Java/Hibernate/UniqueResultHQL.htm

于 2012-07-17T09:04:48.213 回答
0

首先,您必须为 :asd 设置值,但这可能很清楚。

然后你去执行查询并转换结果。因为您似乎期望此查询返回单个值,所以可以通过Query.uniqueResult执行它。如果您想在假设一个且只有一个非空结果错误的情况下采取一些具体措施,请对返回的空值做出反应或相应地抛出NonUniqueResultException

查询结果如何转换为字符串当然取决于xxx字符串表示的类型和首选格式。一些例子如下:

//type of xxx is already string
String result = (String) q.uniqueResult();

//type of xxx is Integer
Integer res = (Integer) q.uniqueResult();
String result = res.toString();
于 2012-07-16T19:13:51.000 回答
0

在控制器中写下面的代码

// Fetch the result by executing query and store it into string variable as
String typeofpayment = serviceObj.getValueFromDB();
model.addAttribute("typeofpayment",typeofpayment); // This will pass attribute to jsp page

现在在jsp中你可以使用

<c:set var="typeOfPaymentVar" value="${typeofpayment}" scope="request" />
<c:choose>
     <c:when test='${typeOfPaymentVar=="cash"}'>
          CASH
     </c:when>
     <c:otherwise>
          OTHER MODE OF PAYMENT
     </c:otherwise>
</c:choose>
于 2012-07-17T08:17:07.750 回答