ERLEDIGT
NEIN
NEIN
ANTWORTEN
7
7
ZUGRIFFE
2508
2508
EMPFEHLEN
-
Hallo,
HibernateConnection Klasse:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
public class ConnectionFactory { private static ConnectionFactory instance = null; private SessionFactory sessionFactory = null; private ConnectionFactory() { try { sessionFactory = new Configuration().configure().buildSessionFactory(); } catch (MappingException e) { System.err.println("Mapping Exception" + e.getMessage()); throw new RuntimeException(e); } catch (HibernateException e) { System.err.println("Hibernate Exception" + e.getMessage()); throw new RuntimeException(e); } } public static synchronized ConnectionFactory getInstance() { if (instance == null) { instance = new ConnectionFactory(); } return instance; } public Session getSession() { try { Session s = sessionFactory.openSession(); return s; } catch (HibernateException e) { System.err.println("Hibernate Exception" + e.getMessage()); throw new RuntimeException(e); } } }
2 Beispiel POJOs:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
public class Packet { private PacketCategory packetCategory; public Packet() { } public PacketCategory getPacketCategory() { return packetCategory; } public void setPacketCategory(PacketCategory packetCategory) { this.packetCategory = packetCategory; } }
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14
public class PacketCategory { private SortedSet packets = new TreeSet(); public SortedSet getPackets() { return packets; } public void setPackets(SortedSet packets) { this.packets = packets; } }
PacketCategoryService (DAO)Klasse:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
public class PacketCategoryService { public static PacketCategoryService instance; public PacketCategoryService() { } public static synchronized PacketCategoryService getInstance() { if (instance == null) { instance = new PacketCategoryService(); } return instance; } public PacketCategory getPacketCategory(int primaryKey) { Session session = ConnectionFactory.getInstance().getSession(); try { return (PacketCategory)session.load(PacketCategory.class, new Integer(primaryKey)); } catch (ObjectNotFoundException onfe) { return null; } catch (HibernateException e) { System.err.println("Hibernate Exception" + e.getMessage()); throw new RuntimeException(e); } finally { if (session != null) { try { session.close(); } catch (HibernateException e) { System.err.println("Hibernate Exception" + e.getMessage()); throw new RuntimeException(e); } } } } public List getPacketCategoryList() { Session session = ConnectionFactory.getInstance().getSession(); try { Query query = session.createQuery("select packetCategory from model.PacketCategory as packetCategory"); return query.list(); } catch (HibernateException e) { System.err.println("Hibernate Exception" + e.getMessage()); throw new RuntimeException(e); } finally { if (session != null) { try { session.close(); } catch (HibernateException e) { System.err.println("Hibernate Exception" + e.getMessage()); throw new RuntimeException(e); } } } } }
Wenn ich über das ServiceObjekt jetzt alle PacketCategories auslese(getPacketCategoryList), kann ich ja leider nicht mehr auf die Packets zugreifen da die Session schon geschlossen ist und ich mit lazy="true" arbeite.
Gibt es eine Möglichkeit weiterhin mit DAO Objekten zu arbeiten und die Packets auslesen zu können oder muss ich direkt in den Servlets den Hibernate Zugriff durchführen und dann nach Bedarf mit Hibernate.inizialize() arbeiten?
MfG
-
19.05.05 23:39 #2
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.886
- Blog-Einträge
- 29
Hallo!
Normalerweise wird das DAO Pattern anders angewandt. Du hast zuerst mal einen Service. Dieser Service bietet verschiedene Business Methoden an. Innerhalb dieser Business Methoden verwendest du das DAO um Pojos zu persistieren oder aus dem persistenten Speicher zu laden. Dabei könnte man beispielsweise Hibernate mit einem Transaktionsmanager Konfigurieren, so dass du beim Aufruf einer Service Methode
eine neue Transaktion gestartet wird. Innerhalb dieser Service Methode können nun mehrere Methoden eines DAO's aufgerufen werden die innerhalb der selben
Transaktion laufen. Innerhalb einer Transaktion bekommt man immer die selbe Session. Die Session öffnet man dann vor dem Aufruf der Service Methode und nach dem Aufruf schließt man sie wieder. Das Springframework bietet mit den sogenannten TransactionProxy und der Klassen HibernateTransactionManager, TransactionProxyFactoryBean und HibernateDAOSupport erstklassige Unterstützung für dieses Szenario und mal ganz neben bei -> funktioniert wunderbar
... außerdem muss man sich wenn man mit Springs HibernateDAOSupport arbeitet icht mehr um einen etwaigen Session-Lifecycle kümmern (open(),close()... beginTransaction(), commit(), dass übernimmt alles Spring für uns
)
Gruß TomJava rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
-
Vielen Dank.Werde mir mal das Spring Framework anschauen.
Gruß e.motion
-
20.05.05 22:24 #4
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.886
- Blog-Einträge
- 29
Hallo!
Hier mal ein "kleines" Beispiel für die Anwendung des Spring Frameworks mit Hibernate.
Gruß TomJava rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
-
Hey vielen Dank,
werds gleich mal ausprobieren
Gruß
e.motion
-
Hallo,
das Beispielist einleuchtent.
Aber wie mach ich des Wenn zum Beispiel die "PacketCategories" die "Packets" enthalten und die wiederrum "Features" usw...
Müsst ich dann im PacketCategoryService ne Methode schreiben "getAllWithPacketsWithFeaturesWith.....()" vom Typ List in der ich dann mit Hibernate.inizialize() alle Objekte inizialisieren und die List dann über das Request-Objekt an die Tiles weitergeben?
Dies wäre ziemlich umständlich da diese Hirarchie manchmal sehr weit geht. Gibts da keinen anderen Ansatz?
Gruß
e.motion
-
Hi,
du hast den DAOSupport wie Thomas schon sagt um persistente Objects zu laden oder zu "Persistieren".
Dann hast du einen Service in dem du dir die Daten anhand des DAO's besorgst und anschließend für dein Servlets (Controller) aufbereitest. Das heißt du wirst nicht das persistente Object an das Servlet leiten sondern ein Dto (DataTransferObject) oder CommandObject.
Gruß
Romsl
-
31.05.05 12:57 #8
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.886
- Blog-Einträge
- 29
Hallo!
In der Regel ist es aber doch so, dass man gerade wegen der Verwendung von Hibernate nicht mehr auf spezielle DTO's bzw. VO's angewiesen ist, da man die normalen Pojos als "Transportmittel" verwendet.Das heißt du wirst nicht das persistente Object an das Servlet leiten sondern ein Dto (DataTransferObject) oder CommandObject.
Gruß TomJava rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
Ähnliche Themen
-
Hibernate Persistence.xml - Sinnvoller Wert für hibernate.hbm2ddl.auto
Von Herr_M im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 3Letzter Beitrag: 08.10.08, 08:21 -
Hibernate: Mapping v. Beziehungen und was Hibernate daraus macht
Von DerGrinsemann im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 2Letzter Beitrag: 14.08.08, 12:53 -
JSF - Hibernate - Exception bei Update (org.hibernate.NonUniqueObjectException)
Von alan79 im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 2Letzter Beitrag: 04.04.08, 06:44 -
Hibernate: save, update, saveOrUpdate, merge, .... [an alle Hibernate-Profis]
Von DerGrinsemann im Forum JavaAntworten: 2Letzter Beitrag: 13.06.07, 09:24 -
Hibernate (offizielles Eclipse Plugin aus Hibernate Tools) und MySQL
Von webmagier im Forum JavaAntworten: 1Letzter Beitrag: 25.01.06, 17:59





Zitieren

Login





