#java #hibernate
#java #гибернация
Вопрос:
Я знаю, как извлечь несколько столбцов или строк или оба, используя метод гибернации, приведенный ниже. Однако я не уверен, как извлечь только одну строку или столбец и присвоить его строковой переменной. Любая помощь по этому поводу? Спасибо
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
Ответ №1:
Чтобы получить одну строку, вы должны использовать 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), если возвращаемый объект является «массивом» или «массивом»…
Ответ №2:
Используйте uniqueResult()
, который возвращает объект. И если несколько строк совпадают с sql-запросом, тогда он выдает NonUniqueResultException
.
Для or нет опции uniqueResult()[0]
uniqueResult().get(0)
.
Если ваш запрос возвращает несколько запросов, вы можете использовать list()
Если вы не уверены, сколько строк возвращается запросом, но хотите получить одно значение из одного из них. Использовать list().get(0)
или list()[0]