Spring2 + Hibernate + Annotations + Service + DAO > insert ?

Nobody

Mitglied
Hiho,

ich habe einen Beispielcode der mir via sessioncatory, service und DAO aus einem Criteria objekt einen query formt... das hab ich auch soweit verstanden (denke ich)

Leider sind in diesem beispiel Zwar auch setter (setUsername beispielsweise) in der entsprechenden Klasse (entity) enthalten jedoch kein beispiel wie ich dies nutze.

Ich hab diverse beispiele gefunden die andere wege gehen um ein "Insert" auszuführen aber jedesmal wird das ganze anders implementiert was sehr irritierend für mich ist, daher die frage ob mir jemand ein beispiel hierzu geben könnte...

aktueller aufbau(das wichtigste in auszügen):

Application.java
PHP:
myUser = service.getUser(user, pass);

applicationServiceImpl.java(Service)

PHP:
        try {
            // Return the result of the data access call.
            return repository.getUser(user, pass);

applicationRepositoryImpl.java(DAO)

PHP:
public User getUser(String user, String pass) {
        // Ask Hibernate to query for the user based upon the specified user/pass.
        Criteria crit = sessionFactory.getCurrentSession().createCriteria(User.class);
        crit.add(Restrictions.eq("userName", user));
        crit.add(Restrictions.eq("password", pass));
        User myUser = (User) crit.uniqueResult();

dazu kommt die klasse User und halt noch die Springbeans...

wie nutze ich nun zum beispiel die Methode "setUserName" in der Klasse User Richtig und vor allem Effizient weil mir fehlt irgendwo der Bezug zwischen User klasse und der getUser Methode aus applicationRepositoryImpl.?

Ich hoffe ihr kommt mit den auszügen klar und könnt mir da helfen, thx schonmal

mfg
 
Spring2 + Annotations + DAO Verständnisfrage

Ich habe bei einer Webapplikation folgende Kontruktion(aus einem beispiel code):

User.class wird via annotations mit spring2 für die mySQL table 'users' verwendet

von meiner 'application.class' wird über einen Service ( org.springframework.stereotype.Service, org.springframework.transaction.annotation.Transactional) auf die DAO klasse zugegriffen in welcher mittels Hibernate Sessionfactory,Criteria,creterion und restriction dann ein query geformt wird welcher mir aus der Klasse User (table users) einfach nur einen User raussuchen soll...

Das ganze ist der Login für die Webappliktion und funktioniert auch soweit.

Nun zur Frage(n):

1) wozu dienen die Methoden wie 'getUserName' , 'getPassword', 'setUserName'... u.s.w. welche in der Klasse User zu finden sind wenn diese nirgendwo in der JavaApplikation aufgerufen werden?

2) in der DAO file finde ich eine Methode 'setSessionFactory' genauso wie ich in der 'Service+ Annotation.class' file eine Methode 'setApplicationRepository' Methode Existiert, beide werden ebenso nirgendwo aufgerufen, sind das Hibernate interne Sachen oder wozu sind sie Da?

3) ist es Natürlich schön das das Auslesen der Informationen schonmal soweit klappt, aber wie befülle ich die Tabelle, meinetwegen wenn sich ein User neu regestriert (lassen wir mal die übliche email validierung und dergleichen weg) geht dies auch über die DAO file oder spreche ich dann die unter Frage 1 auch genannten Setter Funktionen in der Klasse User direkt an?



Bei dem Beispiel-Code handelt es sich um die hier :

http://sziebert.net/posts/red5-hibernate-revisited/

zu findende Implementierung von Hibernate in einen bestehenden Mediaserver.


Ich bin für jede hilfreiche Antwort dankbar:)

mfg
 
Zuletzt bearbeitet:
Thx an die Mods fürs zusammen fassen und verschieben in den richtigen bereich und sorry wegen des Doppelposts:rolleyes:

mfg
 
Huiuiui... was mir ein wenig Angst macht, ist, dass anhand deiner Fragen offensichtlich wird, dass du dir da schön Code zusammenkopiert hast, aber es noch arg an Grundlagen zu Spring und Hibernate fehlt.

Punkt 1: Security codet man nicht selbst :). Wenn du Spring hast, lohnt ein Blick auf Spring Security. Hierfür ist aber ein gewisses Grundverständnis von Spring notwendig. Methodisch ist dein vorgehen ebenfalls suboptimal. Im Normalfall lädt man nicht den User anhand des Usernamens und des Passworts sonder einfach nur anhand des Namens, gibt den an das Authentifikationssubsystem zurück und läst dies entscheiden, ob ein evtl. vorhandenes Passwort den gefundenen User matcht.

1) wozu dienen die Methoden wie 'getUserName' , 'getPassword', 'setUserName'... u.s.w. welche in der Klasse User zu finden sind wenn diese nirgendwo in der JavaApplikation aufgerufen werden?
Gegenfrage: kennst du das Java Beans Konzept?

2) in der DAO file finde ich eine Methode 'setSessionFactory' genauso wie ich in der 'Service+ Annotation.class' file eine Methode 'setApplicationRepository' Methode Existiert, beide werden ebenso nirgendwo aufgerufen, sind das Hibernate interne Sachen oder wozu sind sie Da?
Du erbst von HibernateDaoSupport. Das ist eine Springklasse. Das zentrale Konzept von Spring ist Dependency Injection. Setterinjection nutzt eben Settermethoden dafür. D.h. die Methoden werden von Spring gerufen und dienen dazu Abhängigkeiten explizit zu machen.

3) ist es Natürlich schön das das Auslesen der Informationen schonmal soweit klappt, aber wie befülle ich die Tabelle, meinetwegen wenn sich ein User neu regestriert (lassen wir mal die übliche email validierung und dergleichen weg) geht dies auch über die DAO file oder spreche ich dann die unter Frage 1 auch genannten Setter Funktionen in der Klasse User direkt an?
DAO File? In wieweit hast du dich schon mit Persistenz in Java beschäftigt? Weist du was ein DAO ist?

Gruß
Ollie
 
Huiuiui... was mir ein wenig Angst macht, ist, dass anhand deiner Fragen offensichtlich wird, dass du dir da schön Code zusammenkopiert hast, aber es noch arg an Grundlagen zu Spring und Hibernate fehlt.

Das Kompliment muss ich weiterreichen an den Author des Tutorials aus dessen Feder der gesammte Quelltext stammt (siehe folgenden link):

http://sziebert.net/posts/red5-hibernate-revisited/


Punkt 1: Security codet man nicht selbst :). Wenn du Spring hast, lohnt ein Blick auf Spring Security. Hierfür ist aber ein gewisses Grundverständnis von Spring notwendig. Methodisch ist dein vorgehen ebenfalls suboptimal. Im Normalfall lädt man nicht den User anhand des Usernamens und des Passworts sonder einfach nur anhand des Namens, gibt den an das Authentifikationssubsystem zurück und läst dies entscheiden, ob ein evtl. vorhandenes Passwort den gefundenen User matcht.


Gegenfrage: kennst du das Java Beans Konzept?

Ich weiss das meine Kenntnisse in bezeichneter Sache recht mikrig sind und nein das Konzept kenn ich nicht bzw. ich bin genötigt es zu benutzen aber erklären könnte ich es nicht
Du erbst von HibernateDaoSupport. Das ist eine Springklasse. Das zentrale Konzept von Spring ist Dependency Injection. Setterinjection nutzt eben Settermethoden dafür. D.h. die Methoden werden von Spring gerufen und dienen dazu Abhängigkeiten explizit zu machen.


DAO File? In wieweit hast du dich schon mit Persistenz in Java beschäftigt? Weist du was ein DAO ist?

Ein Data Access Object... wenn ichs mir erklären müsste würd ich sagen "sowas wie ein Object das für den Inhalt eines Anderen Objectes oder in diesem Falle eines Datensatzes steht (also sowas wie eine refferenzierung)"

Deine Antwort sagt mir das du nicht wirklich unter dem oben genannten Link nachgeschaut hast oder nur die hälfte gelesen...

Wie dem auch Seie, wenns um Sachen geht in denen ich der Spezi bin empfehle ich auch immer die Hilfe zu lesen und bins selber gewöhnt mir im Quelltext anzuschauen "wo wird auf was verwiesen" und "wo wird was aufgerufen"... meine Kentnisse stützen sich auf oben genanntes, in meinen Augen leider schlecht dokumentierte, Beispiel sowie die Grundkenntnisse die man nach ca 8 Jahren Programmierung in ECMA4 script sprachen haben sollte, dennoch möchte sicherlich wissen wie man es besser machen kann womit jedoch wieder 3 Monate lernen verbunden wäre solange mir keiner nen Tritt in die Richtige Richtung verpasst und aktuell ist es mir halt wichtiger das es erstmal läuft damit ich weitermachen kann und nicht den Sinn und somit das Ziel vor Augen verliere!

Später werde ich durch das mittels "learning by doing" erworbene Wissen in das eh benötigte Refractoring zum Optimieren und ggf. völligen überarbeiten des Codes mit einfliessen lassen.

Da ich bei diesen Geschichten vollens auf Beispiele angewiesen bin und nicht einmal weiss ob die rangehensweise das Optimale rausholt ist es für mich halt wichtig erstmal was lauffähiges zu haben mit dem ich Arbeiten kann.

Wenn Du oben besagtem Link folgst hast du meinen Kenntnissstand zudem versuche ich mich über dieses googlebuch:

http://books.google.com/books?id=mG...moGvBw&sa=X&oi=book_result&ct=result&resnum=9

in die ganze Geschichte rein zu lesen...

Sorry ich nehme an das ich wahrscheinlich schon viel Mist in dem Beitrag geschrieben habe aber manchmal kann man halt nicht warten bis man alles verstanden hat sondern muss es sehen um es zu begreifen und sich dann selber nen reim drauf machen.

mfg
Sascha
 
Das Kompliment muss ich weiterreichen an den Author des Tutorials aus dessen Feder der gesammte Quelltext stammt (siehe folgenden link):

http://sziebert.net/posts/red5-hibernate-revisited/
Das eine hat doch mit dem anderen nichts zu tun. Der Kollege aus dem Blog gibt ein Beispiel dafür wie man Red5 mit Spring und Hibernate verbindet. D.h. nicht, dass das der Weisheit letzter Schluss ist oder gar Best practices entspricht. Es entspricht den Bedürfnissen eines Beispiels, nicht undbedingt den eines guten Loginhandlings. Aber wir schweifen ab. Der Hinweis war ja auch nur methodisch... Auch das was ich hier schreibe ist nicht in Stein gemeißelt. Es ist mir nur aufgefallen...

Ich weiss das meine Kenntnisse in bezeichneter Sache recht mikrig sind und nein das Konzept kenn ich nicht bzw. ich bin genötigt es zu benutzen aber erklären könnte ich es nicht
Ich wollte dir mit meinem Post auch nicht sagen "Du bist blöd und das zeig ich dir jetzt..." sondern eher ausdrücken, dass es für mich als Antwortenden nur möglich ist die Fragen zu beantworten, wenn ein gewisses Grundverständnis auf deiner Seite vorhanden ist. Sonst schreiben wir alle hier irgendwann Romane :). Die Gegenfragen sind also rhetorischer Natur und sollen dazu anregen sich in dise Richtungen weiter zu informieren. Wenn du dem Hinweis mit den JavaBeans z.B. folgst, wirst du erfahren, dass das ein Pattern aus der Javawelt ist, damit Kapselung betrieben wird und in JSP z.B. über die EL darauf zugegriffen werden kann (${user.username}). Die Divergenz zwischen scheinbar trivialen Fragen (wozu sd die Getter da?) und sehr abstrakten (was macht ein DAO) macht es für die Antwortenden einfach unheimlich schwer zu antworten. Verweis ich auf das Grundlagenforum (JavaBeans) oder auf eine Webseite mit komplexen Architekturthemen?

Soviel Metadiskussion :). Hier noch etwas mehr "Fleisch"...

Ein Data Access Object... wenn ichs mir erklären müsste würd ich sagen "sowas wie ein Object das für den Inhalt eines Anderen Objectes oder in diesem Falle eines Datensatzes steht (also sowas wie eine refferenzierung)"
Data Access Object ist ein Pattern um Persistenzlogik von Geschäftslogik zu trennen. http://de.wikipedia.org/wiki/Data_Access_Object

Deine Antwort sagt mir das du nicht wirklich unter dem oben genannten Link nachgeschaut hast oder nur die hälfte gelesen...
Die Aussage kann ich nicht nachvollziehen? Du hast versucht mit ein wenig Beispielcode relativ unreflektiert auf dein Problem zu schlagen. Dabei treten natürlich einige Verständnisfragen auf. Die jetzt aber wieder mit Beispielcode zu erschlagen, halte ich für wenig sinnvoll. Zumal ich auch nicht wirklich sehe wie man auf die Fragen mit Beispielcode sinnvoll antworten könnte.

Wenn Du oben besagtem Link folgst hast du meinen Kenntnissstand...
Nochmal - da ist Beispielcode. Der sagt nichts darüber aus, was DU dazu weißt. Ergo sollten meine Gegenfragen der Klarstellung dienen, was gemau man dir eben noch erklären sollte.

Sinde die Fragen denn jetzt soweit geklärt? 1. sollte klar sein, 2. auch (die eigentlich relevante Info war ja: wird von Spring gerufen). Zu 3.: Speichernde Aufrufe genauso durch den Service ans DAO weiterleiten und dort über die Session ablegen.

Gruß
Ollie
 
Die Divergenz zwischen scheinbar trivialen Fragen (wozu sd die Getter da?) und sehr abstrakten (was macht ein DAO) macht es für die Antwortenden einfach unheimlich schwer zu antworten.
kurz nochmal hierzu...

Die Frage war eher so gemeint das mir zwar bewusst ist welchen Sinn und Zweck get'er und set'er in der OOP Welt einnehmen, ich jedoch keine Verbindung zu dem im Beispiel verwandten Code ziehen konnte, da ich keinen Aufruf dieser Methoden fand.
Nochmal - da ist Beispielcode. Der sagt nichts darüber aus, was DU dazu weißt. Ergo sollten meine Gegenfragen der Klarstellung dienen, was gemau man dir eben noch erklären sollte.

Sinde die Fragen denn jetzt soweit geklärt? 1. sollte klar sein, 2. auch (die eigentlich relevante Info war ja: wird von Spring gerufen). Zu 3.: Speichernde Aufrufe genauso durch den Service ans DAO weiterleiten und dort über die Session ablegen.

Gruß
Ollie

Danke schonmal hast mir sehr geholfen, zu 3 hätte ich jedoch noch eine Frage, undzwar habe ich hier ein wohl auch recht simples Beipiel über das befüllen einer DB Tabelle gefunden:

http://www.roseindia.net/hibernate/insert-data-database.shtml

wo mir aber wieder etwas fehlt da hier die set Funktionen der der SQL Table entsprechenden Klasse (in meinem Fall wäre es User bei dem Link gerade ist es der Studentdetail) direkt aus der Klasse "HibernateNativeInsert" heraus aufgerufen werden... wäre es sinnvoll erstmal hiermit zu Arbeiten oder schlägst du mir eine andere rangehensweise vor, falls ja bitte hinweis auf eine Klasse / Methode die ich ergooglen kann, danke?

mfg
Sascha
 
Das Beispiel zeigt, wie man Hibernate mit Nativem SQL verwendet. Das macht man allerdings nur in Ausnahmefällen. Es reicht eigenlich je nach Kontext saveOrUpdate oder merge auf der hibernate Session zu rufen.

Gruß
Ollie
 

Neue Beiträge

Zurück