Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Hibernate native query плучить имена столбцов


Автор: Fedrus 24.10.2008, 10:03
Добрый день,
можно ли при выполнении NativeQuery (например - .createNativeQuery("SELECT * FROM CUSER"))
как нибудь получить имена столбцов? Использовать не native не могу.

Автор: necromancer 24.10.2008, 11:14
читаем hibernate api - Query:
 String[]    getNamedParameters()
          Return the names of all named parameters of the query.
 String    getQueryString()
          Get the query string.
 String[]    getReturnAliases()
          Return the HQL select clause aliases (if any)
 Type[]    getReturnTypes()
          Return the Hibernate types of the query result set.

не факт, но может быть искомая информация сокрыта где либо тут?
крайний случай парсить результат: getQueryString() например с помощью Scanner

Автор: Fedrus 24.10.2008, 14:32
В перечисленных методах нет нужной информации. (похоже ты меня не совсем понял)
getNamedParameters() - вернул пустой массив
а getReturnAliases() и getReturnTypes()  выбрасывают ошибки(да и вообще мне кажется сначала должны быть алиасы и возврощаемые типы в запросе чтоб эти методы отработали)

Не совсем понял что значит парсить результат getQueryString() ??
результат то - "SELECT * FROM CUSER" ?

Автор: necromancer 24.10.2008, 15:38
в таком случае может проще не использовать Hibernate?  =)
а использовать нативный ResultSet & PreparedStatement.
Если переживаешь о конекшенах то их можно получить их Hibernate и туда же вернуть.

PS еще нашел решение =) дергать функцию которая вернет списком параметры перед первым запросом =)

Автор: Fedrus 24.10.2008, 16:30
Спасибо пожалуй так и сделаю обойдусь без Hibernate.

Автор: Lesli 28.10.2008, 11:33
Добрый день, я начинающий программист и у меня похожая проблема))
Сделал так 
Код

ResultSet rs = null;
        Connection connection = null;
        try {

            ConnectionProvider connProvider = ConnectionProviderFactory
                    .newConnectionProvider();
            connection = connProvider.getConnection();

            Statement stmt = connection.createStatement();
            rs = stmt.executeQuery(sql);

        } catch (HibernateException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return rs;



Только при получении ConnectionProviderа всплыл WARN  : No connection properties specified - the user must supply JDBC connections
а потом при получении connection ошибка:
java.lang.UnsupportedOperationException: The user must supply a JDBC connection

Я так понял что нужно при получении ConnectionProviderа подсунуть Properties, ток не знаю как их получить если надо то могу выложить полный стектрайс ошибки)
Помогите пожалуйста? От куда получить Properties?

Автор: Fedrus 30.10.2008, 14:58
У меня так..
Код

public ResultSet sqlSearch(String sql) {
        ResultSet rs = null;
        Connection connection = null;
        try {
            Session s = (Session) getJpaTemplate().getEntityManagerFactory()
                    .createEntityManager().getDelegate();
            connection = ((SessionFactoryImplementor) s.getSessionFactory())
                    .getConnectionProvider().getConnection();
            Statement stmt = connection
                    .createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
                            ResultSet.CONCUR_READ_ONLY);
            rs = stmt.executeQuery(sql);
        } catch (HibernateException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return rs;
    }

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)