DAO: Designproblem (Verständnis) bei Listen (JList)

Hallo Community,

ich bin gerade mal wieder dabei meinen Quellcode zu hinterfragen.
(Habe ein Projekt, welches seit ich mit Java begonnen habe immer wieder erweitert wird und auch schon das ein oder andere Mal eine Komplettüberarbeitung erfahren hat :D)

Eine Überarbeitung war die Einführung von DA-Objekten um den Zugriff auf die Datenbank übersichtlicher und getrennt vom restlichen Code zu haben. Das Funktioniert auch einwandfrei.

Nun hatte ich mir aber (vor der Einführung der DAO’s) eine Klasse geschrieben “MyDbJlist” (geerbt von JList)
In dieser Klasse gibt es dann beispielsweise eine Methode “delteElementAt(int index)”

In dieser Methode wird nun das Objekt an der Stelle “index” ermittelt, es wird sich Session von der Sessionfactory genommen und schließend das Objekt gelöscht und die Session wird wieder geschlossen.

	public void deleteElementAt(int index) {
		Session session   	= null;
		Object obj		  	= null;
		try {
			obj    		  	= this.getModel().getElementAt(index);
			session 	  	= HibernateUtil.getSession();
			session.delete(obj);
			session.flush();
			this.removeElement(index);
		}
		catch (Exception e) {
                      ...
		}
		finally {			
			session.close();
			this.repaint();
		}			
	}

An sich finde ich die Klasse ziemlich praktisch, da ich mittels der Klasse einfach Datenbankinhalte auflisten und löschen kann. (Ohne viel neuen Code zu schreiben). Einfach eine neue Klasse (bspw. KontaktList extends MyDbJList) anlegen und schon habe ich eine Liste die mir die Kontakte anzeigen kann.

Allerdings stört mich derzeit ein wenig, dass ich an dieser Stelle dann nicht mit dem eigentlich DAO (also bspw. KontaktDAO) gearbeitet wird und somit das Handling wieder an mehrern Stellen stattfindet.

Was haltet ihr davon? Schlecht konstruiert oder doch Sinnvoll?
Gibt es eine Möglichkeit, dass ich beide Vorteile nutzen kann?

Warum benutzt du nicht den EntityManager (ist auch ein DAO) mit solchen generischen Sachen?

Da muss ich mich jetzt erst mal über EntityManager erkundigen, bevor ich dir die Frage beantworten kann :smiley:

Also am schönsten wäre es UI --> Service (Interface und HibernateImpl + Transaktion Handling) --> DAO (EntityManager) --> DB