как вызвать хранимую процедуру с несколькими таблицами в файле hibernate hbm и pojo, а также в классе java

SELECT emp.employeeId, emp.employeeFirstName, comp.companyname, dept.departmentname 
FROM Employeetable emp, Companytable comp, departmenttable dept 
WHERE emp.employeeCompanyId=comp.companyId AND emp.EmployeeDepartmentID=dept.DepartmentID;

The employeetable hbm file:

<sql-query name="callrealtimeprocedure">
    <return alias="employeetable" class="com.AdiSys.eRMS.entity.Employeetable"/>
    <return-join alias="companytable" property="com.AdiSys.eRMS.entity.Employeetable"/>
    <return-join alias="companytable" property="com.AdiSys.eRMS.entity.Employeetable"/>
</sql-query>

Таблица сотрудников:

@NamedNativeQueries({
@NamedNativeQuery(
name = "callrealtimeprocedure",
query = "CALL realtime(:employeeId,:employeeFirstName)",
resultClass = Employeetable.class
)
})
@Entity

Аналогично отделите hbm и pojo.

Мой класс Java после создания сеанса:

Query EmplyeeQuery = session.createSQLQuery("CALL realtime(:employeeId,:employeeFirstName,:companyname,:departmentname)")
        .addEntity(Employeetable.class)
        .addEntity(Companytable.class)
        .addEntity(Departmenttable.class)
        .setParameter("employeeId", "")
        .setParameter("employeeFirstName","")
        .setParameter("companyname", "")
        .setParameter("departmentname", "");

Я не могу узнать, как связать sql-запрос хранимой процедуры в классе hbm, pojo и java.


person Mahendra    schedule 10.02.2012    source источник
comment
Что значит связать? Вы имеете в виду, что хранимая процедура возвращает набор результатов, который вы хотите преобразовать в набор POJO? Просьба уточнить. И, пожалуйста, постарайтесь лучше отформатировать свой код.   -  person Dawood ibn Kareem    schedule 10.02.2012
comment
привет, Дэвид, извините, что не разместил вопрос должным образом. Мой вопрос: у меня есть три таблицы: companytable,employeetable и Departmenttable. Я создал хранимую процедуру, содержащую sql-запрос -SELECT emp.employeeId,emp.employeeFirstName,comp.companyname,dept.departmentname FROM Employeetable emp,Companytable comp,departmenttable dept, где emp.employeeCompanyId=comp.companyId и emp.EmployeeDepartmentID=dept.DepartmentID; Я хочу, чтобы мы сопоставили эти файлы hbm и класс pojo и java. Если вы предоставите ссылку с примером, это будет более полезно.   -  person Mahendra    schedule 10.02.2012


Ответы (1)


Ну, для начала, я бы не стал заморачиваться с хранимой процедурой. Весь смысл использования Hibernate в том, что вам не нужно писать SQL. Если вы собираетесь писать SQL, то от использования Hibernate мало что можно получить.

Действительно хорошим источником документации по Hibernate является http://www.hibernate.org/docs. в «Основном справочном руководстве» для любой версии Hibernate, которая у вас есть, вы найдете несколько действительно хороших примеров того, как настроить свои POJO.

Кроме того, я не знаю, планируете ли вы использовать аннотации Hibernate. Мне это нравится - они намного менее беспорядочны, чем использование отдельных XML-файлов. Ознакомьтесь с «Справочным руководством по аннотациям Hibernate» (по той же ссылке в версии 3.5) для получения рекомендаций по их использованию.

person Dawood ibn Kareem    schedule 10.02.2012
comment
спасибо за ваш совет, Дэвид. есть еще одно сомнение, есть ли какой-либо другой способ, кроме аннотаций, которые вы рекомендуете для сопоставления хранимых процедур - person Mahendra; 10.02.2012
comment
Аннотации являются необязательным дополнением; вам вообще не нужно их использовать. Но почему вас так интересуют хранимые процедуры? Они не очень хорошо подходят для Hibernate, поскольку весь смысл Hibernate заключается в том, чтобы избежать написания SQL. - person Dawood ibn Kareem; 10.02.2012
comment
Я согласен с вашим советом, причина, по которой я отчаянно пытаюсь использовать хранимую процедуру, - это проблема с производительностью, из-за которой требуется много времени для записей в реальном времени и для отображения существующих записей из базы данных, запрашивающих почти 15 запросов, проверяющих многие таблицы, которые вызывает спящий режим. даже после настройки размера пакетного обновления в файле configuration.xml.любые предложения - person Mahendra; 10.02.2012
comment
Как долго это долго? Какую СУБД вы используете? Это фактический запрос, который плохо работает, или это просто пример? Если это реальный запрос, то сколько строк в таблице сотрудников? Замена «голых» запросов хранимыми процедурами вряд ли решит серьезную проблему с производительностью; но есть множество других методов настройки производительности базы данных. В общем, это действительно не имеет ничего общего с Hibernate или Java. - person Dawood ibn Kareem; 10.02.2012
comment
Я использую mysql. Это был пример. Не могли бы вы рассказать мне о методах настройки производительности базы данных. - person Mahendra; 10.02.2012
comment
@Mahendra - об этом написаны целые книги, поэтому я не могу отдать должное теме в комментарии здесь. Возможно, вы могли бы задать конкретный вопрос о настройке производительности, и я постараюсь ответить. Однако у меня очень мало опыта работы с mySQL, и многие методы настройки весьма специфичны для СУБД. В качестве альтернативы вы можете опубликовать ФАКТИЧЕСКИЙ запрос, который работает плохо, я мог бы дать вам некоторые конкретные вещи для проверки (например, индексы, которые вам могут понадобиться, или статистику для сбора и т. д.) - person Dawood ibn Kareem; 11.02.2012