Как создать GenericDao без повторения CRUD с помощью Spring JPA и Hibernate

У меня следующая ситуация. Система компонентов с пакетомВ модели домена уровня есть следующие пакеты с именами:

  1. net.myapp.persistence.spec: содержащий класс интерфейса для операций в домене, содержащемся в классах DTO.
  2. net.myapp.dto: содержащий объект домена

в то время как на уровне Persistence названы следующие пакеты:

  1. net.myapp.persistence.dao.impl, содержащий класс, реализующий работу верхнего уровня
  2. net.myapp.persistence.jpa.entity, объект, содержащий таблицы, представляющие базу данных

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

PS: Я использую Spring Framework для внедрения EntityManager и Hibernate, как поставщик постоянства.


person giulius    schedule 16.07.2011    source источник
comment
Кто-то знает, как это сделать?   -  person giulius    schedule 16.07.2011
comment
Я сделал это до того, как читал эту точную статью. Единственное, что я изменил, - это создание конкретных DAO для моих сущностей с помощью методов поиска, специфичных для предметной области, вместо определения средств поиска. Что именно у вас не сработало?   -  person Olaf    schedule 17.07.2011
comment
Я не могу редактировать слой Domain Modell (Spec и DTO), потому что он используется другим верхним слоем   -  person giulius    schedule 17.07.2011
comment
Нормально ли эти DTO отображаются в Hibernate? Есть ли у них первичные ключи классов Java или других классов, определенных в той же модели? Тогда вы сможете писать DAO, подобные тем, что описаны в статье. Вы можете использовать функции Spring AOP для внедрения обработки транзакций на уровне yournet.myapp.persistence.spec либо через конфигурацию XML, либо путем добавления аннотаций к соответствующим интерфейсам.   -  person Olaf    schedule 18.07.2011
comment
Как ваши объекты DTO соотносятся с сущностями? Есть ли индивидуальная переписка?   -  person Olaf    schedule 18.07.2011
comment
@Olaf: В этом проекте я настроил аннотацию Entity JPA и Hibernate в качестве поставщика, внедрив EntityManager с помощью Spring. Поэтому я могу использовать модуль Spring AOP, мое единственное требование - я не могу изменить уровень модели предметной области, потому что он используется верхним уровнем, у которого нет доступа. Слой классов DTO в Domain-Modell не соответствует уровню Entity Persistence, почему я должен делать своего рода сопоставление   -  person giulius    schedule 19.07.2011
comment
В этом случае вам нужно применить статью к своим сущностям, а не к DTO. Вам нужно будет обеспечить некоторый перевод между объектами и DTO в вашей модели уровня обслуживания / домена.   -  person Olaf    schedule 19.07.2011
comment
Спасибо за идею, но я продолжу работу без этого дополнительного пакета, потому что мне нужно сопоставить каждый отдельный класс в DTO, и я хотел бы получить преимущества   -  person giulius    schedule 19.07.2011
comment
Боюсь, я потерял тебя из-за этого. Ваши классы DAO находятся в net.myapp.persistence.dao.impl, верно? Ваши объекты находятся в net.myapp.jpa.entity, верно? Вы можете применить шаблоны из статьи к своим классам DAO. Есть ли у вас проблемы с таким подходом?   -  person Olaf    schedule 19.07.2011


Ответы (1)


Вы можете попробовать эту библиотеку, если не хотите писать общий дао самостоятельно.

http://code.google.com/p/hibernate-generic-dao/

person Kathir    schedule 29.07.2011