вставка спящего режима java - PullRequest
1 голос
/ 05 марта 2012

Я видел в Интернете учебник, показывающий, что вы можете сделать что-то подобное для удалений и обновлений в Hibernate:

Query query = session.createQuery("delete Stock where stockCode = :stockCode");
query.setParameter("stockCode", "7277");
int result = query.executeUpdate();

В том же учебнике я наткнулся на этот код для вставки:

Query query = session.createQuery("insert into Stock(stock_code, stock_name)" +
            "select stock_code, stock_name from backup_stock");
int result = query.executeUpdate();

Мой вопрос: возможно ли сделать что-то вроде примера удаления из учебника, но вместо этого для метода вставки, используя setParameter?Я попробовал что-то вроде этого и получил ошибку:

Query q = session.createQuery("insert into test(:testname)");
q.setParameter("testname", "tester");

Ошибка касалась свойств.Одна из причин, по которой я использовал вышеупомянутый код, заключается в том, что

 int result =  query.executeUpdate()

может возвращать результат, чтобы проверить, успешно ли я вставил команду SQL или нет.

Ответы [ 2 ]

1 голос
/ 05 марта 2012

Первое:

setParameter

создано для параметров в HQL-запросах, а не для имени поля.

Второе:

Ваш запрос: insert into test(:testname) кажется неполным, это должно быть что-то вроде insert into [TABLE_NAME]([FIELD_NAME],...) values ([VALUE],...), и в этом случае вам следует использовать SQL-запросы с:

createSQLQueries

См .: http://docs.jboss.org/hibernate/orm/3.5/api/org/hibernate/Session.html#createSQLQuery(java.lang.String)

.Почему вам нужно сделать ваш запрос таким динамичным?

И вставка в базу данных будет лучше с сохранением:

session.save(youHibernateObject);

с youHibernateObject - объектом, сопоставленным со схемами сопоставления модели hibernate.Удачи.

0 голосов
/ 06 марта 2012

Возможно, у вас есть ошибка в синтаксисе sql

Сначала синтаксис SQL для оператора вставки:

insert into <table_name> (col1, col2, col3) 
values ('1', 'second value', 'third value')

Так что если у вас есть таблица с именем "test" только с одним столбцом типаСтрока с именем test_name, оператор вставки будет:

    insert into test (test_name) 
    values ('tester') 

Поскольку вы хотите, чтобы значение test_name было настраиваемым, вы должны написать код, например:

Query q = session.createQuery("insert into com.yourpackage.Test (test_name) values (:testname)");
q.setParameter("testname", "tester");
int result =  query.executeUpdate()

Где com.yourpackage.Test - это класс сущностей POJO.

С другой стороны, я бы не советовал использовать hibernate, как этот.Лучше использовать метод save ():

session.save(new Test("Testname"));

Чтобы убедиться, что все хорошо, напишите интеграционный тест или тест JUnit.

Посмотрите на этот шаблон:

http://salto -db.sourceforge.net / salto-db-generator / plugins / ejb3hibernatedao.html

Реализуйте это, поиграйте

Удачи

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...