使用hibernate检索单行和单列

时间:2014-06-17 00:23:20

标签: java hibernate

我知道如何使用下面的Hibernate方法检索多个列或行或两者。但是我不确定如何只检索单个行或列并将其分配给String变量。对此有何帮助?感谢

    Session session = getSessionFactory().beginSession();
    Transaction transaction = null;

    StringBuilder sql = new StringBuilder();

    sql.append("SELECT DISTINCT B.COLUMN_NAME ");
    sql.append("FROM ALL_CONSTRAINTS A, ALL_CONS_COLUMNS B, ARCTBL C ");
    sql.append("WHERE A.TABLE_NAME = :TABLE_NAME AND A.CONSTRAINT_TYPE = 'P' "); 
    sql.append("AND A.CONSTRAINT_NAME = B.CONSTRAINT_NAME ");
    sql.append("AND C.TABLENAME=A.TABLE_NAME AND A.TABLE_NAME=B.TABLE_NAME ");

    try{

    **listOfValues = session.createSQLQuery(sql.toString()).setParameter("TABLE_NAME", table).list();**
    //Change this to code below
String returnObjByHibernate = session.createSQLQuery(//Hibernate method)
    transaction.commit;
    }
    catch (Exception e){
    //Logic here

2 个答案:

答案 0 :(得分:3)

要获得单行,您必须使用uniqueResult()而不是list()

http://docs.jboss.org/hibernate/orm/3.5/javadocs/org/hibernate/Query.html#uniqueResult()

它返回一个字符串或一个字符串数组(我不记得)所以你的行应该是:

strValue = session.createSQLQuery(sql.toString()).setParameter("TABLE_NAME", table).uniqueResult();

如果返回的对象是'数组,则将其更改为uniqueResult()[0]或uniqueResult()。get(0)。或者一个'数组' ...

答案 1 :(得分:1)

使用返回对象的uniqueResult()。如果有多个行匹配sql查询,那么它会抛出NonUniqueResultException

uniqueResult()[0]uniqueResult().get(0)没有选项。

如果您的查询返回多个查询,则可以使用list()

如果您不确定查询返回了多少行,但希望从其中一行获取单个值。使用list().get(0)list()[0]

see here