Создать сервисный слой с Hibernate - PullRequest
1 голос
/ 12 июня 2010

Я генерирую .hbm.xml файлы сопоставления и .java файлы из схемы БД с помощью Hibernate Tools. У меня вопрос, есть ли возможность генерировать классы обслуживания? Это классы, в которых я реализую методы store (), find (), delete () и т. Д. Я знаю, что для C # существует множество решений для генерации практически всего. Я ищу то же самое, но с Hibernate. Есть ли?

Ответы [ 4 ]

2 голосов
/ 12 июня 2010

Нет возможности генерировать услуги.

Вы должны иметь возможность написать только один общий интерфейс и реализацию DAO с помощью Hibernate.

Как это:

package persistence;

import java.io.Serializable;
import java.util.List;

public interface GenericDao<T, K extends Serializable>
{
    T find(K id);
    List<T> find();
    List<T> find(T example);
    List<T> find(String queryName, String [] paramNames, Object [] bindValues);

    K save(T instance);
    void update(T instance);
    void delete(T instance);
}
1 голос
/ 13 июня 2010

Генерирование «сервисов» не имеет для меня особого смысла, поскольку сервисы обычно реализуют бизнес-логику (которую Hibernate не может волшебным образом генерировать).

Теперь, если вы имеете в виду код доступа к данным, то есть DAO (раскрывающий и реализующий методы и средства поиска CRUD), то Hibernate Tools может это сделать. Это опция DAO code (.java) для захвата плагина Eclipse , показанного ниже:

альтернативный текст http://docs.jboss.org/tools/2.0.0.GA/hibernatetools/en/html/images/codegenexporters.png

Эквивалент Задача муравья равен hbm2dao.

Но я лично не использую эту функцию, и я бы пошел Даффимо в путь .

0 голосов
/ 13 июня 2010

Вы можете реализовать уровень доступа к данным, просто объявив интерфейсы и реализовав их с использованием прокси-серверов JDK, которые затем вызывают методы гибернации. Подробности здесь - Простой слой доступа к данным с использованием hibernate .

Я реализовал это, и оно работает хорошо и выросло, чтобы удовлетворить мои потребности. Я расширил методы add (), remove () и т. Д., Чтобы они также включали именованные запросы (findQueryName) и использование Generics, поэтому все, что мне нужно сделать для объявления базового интерфейса доступа к данным CRUD, это

   public interface SomeObjectDAO extends GenericDAO<SomeObject> {
   }
0 голосов
/ 12 июня 2010

Spring Roo может иметь то, что вы хотите.

...