2010-03-08 5 views
2

В моем понимании о настройке спящего режима, мне нужно создатьHibernate и хранимые процедуры

  • таблицы мета файл данных (person.hbm.xml), включают в себя все отображения полей
  • объект Java (person.java)

Если мы используем хранимые процедуры для всех транзакций, нужна ли нам следующая конфигурация?

Кажется, зимуют и хранимые процедуры будут пересекаться,

Мы создали хранимую процедуру, потому что мы не хотим, чтобы разработчик знать все поля в БД. Если таблицы меняются, нам необходимо обновить файлы выше.

Означает ли это, если мы просто использовать хранимые процедуры, мы должны просто пойти на JDBC?

Если спящий режим, мы должны остаться в HQL?

ответ

0

Вы можете сопоставить поля базы данных в результате набора на объект в спящем режиме: the documentation объясняет, как.

Идея Hibernate, чтобы заполнить объектно-реляционная пробел. С хранимыми процедурами (которые я не могу угадать, так как вы ничего не сказали о них), вы не можете получить объекты из базы данных. У вас все еще есть строки.

Скрытие столбцов базы данных от разработчиков звучит как плохая практика для меня. Скрыть их от приложения, возможно, вы хотите, и вы достигнете этого с помощью файла метаданных.

2

Вы можете использовать родной SQL и отобразить результат объекта:

sess.createSQLQuery("SELECT * FROM CATS").addEntity(Cat.class); 

JDBC синтаксис для вызова процедуры сохранения, как следующее:

CallableStatement proc = 
connection.prepareCall("{ call set_death_age(?, ?) }"); 
proc.setString(1, poetName); 
proc.setInt(2, age); 

Так может быть, вы можете вызвать хранимую процедуру и отобразить ее на объект:

sess.createSQLQuery("{ call my_stored_proc }").addEntity(Cat.class); 

Следует также отметить, что обновление, сделанное с помощью хранимых процедур, избежит спящего режима, а это значит, что вам нужно будет выселить объекты с 1-го уровня и 2-го уровня кэша себя.

Итак, как вы видите, спящий режим и хранимая процедура не подходят друг другу вместе.

мы создали хранимую процедуру, потому что мы не хотим, чтобы разработчик знать все поля в БД. если изменение таблицы, , то нам нужно обновить файлы выше.

Если вы беспокоитесь о безопасности , либо использовать:

  • представления базы данных
  • Oracle column priviledges
  • обеспечивают отображение файлов и запрещающих их модификацию по developpers
0

Использование Hibenate с сохраненными процедурами - это определенное совпадение. Например, для написания скрытой процедуры для INSERT, UPDATE, DELETE и SELECT, Hibernate обеспечивает самый простой способ взаимодействия с объектами реляционных баз данных путем сопоставления их в файлы метаданных, как вы упомянули person.hbm.xml.

Да, использование хранимой процедуры wil требует, чтобы вы все равно записывали эти файлы метаданных. Хранимая процедура не заменяет сопоставления Hibernate. Эти сопоставления указывают только Hibernate, как сохранить объектно-ориентированную модель в базе данных. Самое замечательное в Hibernate заключается в том, что вы можете даже при необходимости генерировать свою модель базы данных из вашего кода JAVA с помощью инструмента генерации схемы.

Что касается хранимых процедур, рекомендуется использовать хранимые процедуры как именованные запросы из файла конфигурации. Это, однако, заставляет вас пропустить лучший потенциал, на мой взгляд, Hibernate.

Ответит ли это на ваш вопрос? Вам нужны дальнейшие объяснения?

1

Можно использовать native-sql и использовать stored procedure for queryinglimiations/rules). Но, как написано в документации:

В настоящее время хранимые процедуры возвращают только скаляры и объекты. <return-join> и <load-collection> не поддерживаются.

Так что, если вы хотите работать с неуправляемыми лицами (т.е. не скаляры в качестве Object[]), вам придется применить ResultTransformer в коде.

Но в конце, если вы хотите скрыть базу данных разработчикам, если вы не хотите сопоставлять объекты с таблицами, если вы не хотите работать с ассоциациями, если вы не хотите использовать HQL, если вы не хотите использовать OO-подход, то я действительно задаюсь вопросом, почему вы хотите использовать Hibernate. Вам лучше использовать необработанный JDBC (например, Spring) или, может быть, картотектор данных, например iBATIS.

Смежные вопросы