błąd przy pobraniu encji (Hibernate)

0

mam w projekcie w kontrolerze taka metode:

@RequestMapping(value =  "/welcome**", method = RequestMethod.GET)
    public ModelAndView welcomePage(@ModelAttribute EmployeeEntity employee, BindingResult result,Principal principal, ModelMap map) {

        ModelAndView model = new ModelAndView();

        //map.addAttribute("employee", new EmployeeEntity());

        String username = principal.getName();
        String status = employeeManager.getEmployeeStatus(username);

        map.addAttribute("employee", employeeManager.getEmployeeData(username));
        model.addObject("status", status);
        model.setViewName("hello");
        return model;

    }

chodzi tu o to gosc loguje sie za pomoca username i password i ja po jego usernamie go identyfikuje, mam metode ktora w DAO przyjmuje username (getEmployeeData) a zwraca encje i przekazuje ja z powrotem i wypelnia formularz danymi ktore w bazie ma ten gosc. Prosta operacja tylko ze nie moge tego zrobic wlasnie zeby wypelnialo formularz jego danymi. Do tej pory dzialalo bez problemu jak byl czysty formularz (zakomentowana linijka). W czym tkwi blad?

0
        ModelAndView model = new ModelAndView();
        map.addAttribute("employee", employeeManager.getEmployeeData(username));
        model.addObject("status", status);
        model.setViewName("hello");

Serio? WTF? Czemu robisz to samo na N sposobów?

        ModelAndView model = new ModelAndView("hello");
        model.addObject("status", status);
        model.addObject("employee", employeeManager.getEmployeeData(username));

To raz.
Dwa, reszta wygląda ok. Pokaż jeszcze ten formularz skoro coś nie działa.

A taki hint ode mnie: przesłyłanie obiektów encyjnych przez formularze to proszenie się o guza bo kiedyś się okaże że masz gdzieś otwartą sesje z bazą danych i cuda się zaczną dziać w bazie ;]

0

@Shalom, faktycznie masz racje ale to nie jest powodem bledu.
Formularz:

<form:form method="post" action="update" commandName="employee">
        <tr>
            <form:hidden path="id" />
        </tr>

        <table>
        <tr>
            <td><form:label path="username"><spring:message code="label.username"/></form:label></td>
            <td><form:input path="username" /></td>
            <td><form:errors path="username" cssClass="error" /></td>
        </tr>

//kolejne pola w formularzu

    </table> 
    </div>
        <div id="center">
        <tr>
            <td colspan="2">
                <input type="submit" value="edytuj"/>
            </td>
        </tr>

    </form:form>

kontroler:

@RequestMapping(value =  "/welcome**", method = RequestMethod.GET)
    public String welcomePage(@ModelAttribute EmployeeEntity employee, BindingResult result,Principal principal, ModelMap map) {

        //map.addAttribute("employee", new EmployeeEntity());

        String username = principal.getName();
        String status = employeeManager.getEmployeeStatus(username);

        int punkty = employeeManager.getEmployeePoints(username);
        map.addAttribute("employee", employeeManager.getEmployeeData(username));

        map.addAttribute("status", status);
        map.addAttribute("punkty", punkty);

        return "hello";

    }

a to metoda DAO:

@Override
    public EmployeeEntity getEmployeeData(String username) {
        Query query = sessionFactory.getCurrentSession().createQuery("from EmployeeEntity where username = :username");
        query.setParameter("username", username);

        List<EmployeeEntity> list = query.list();
        EmployeeEntity student = (EmployeeEntity)list.get(0);
        return student;
    }

chce po prostu w momencie wywolania zadania /welcome miec juz uzupelniony formularz. W stanie obecnym żadanie /welcome wywoluje wyjatek:

Request processing failed; nested exception is org.hibernate.HibernateException: No Session found for current thread
0

Nie ma sesji z bazą danych dlatego taki błąd. Czy twoje DAO ma adnotację @Transactional? Nie zapomniałeś dodać transakcji w konfiguracji?

0

@olek1, faktycznie nie bylo adnotacji przy metodzie w serwisie ale dodalem i ten sam blad. Transakcje wlaczone:

<bean id="transactionManager"
        class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"></property>
    </bean>

    <tx:annotation-driven transaction-manager="transactionManager"/>
0
<tx:annotation-driven transaction-manager="transactionManager"/>

Spróbuj to przerzucić do servlet.xml

0

@olek1, ale to juz jest w servlet.xml

pomoze ktos? bede wdzieczny

1

Jeśli nadal masz session not found to albo brakuje ci @Transactional albo transakcje są źle skonfigurowane. Podaj link do repo...

0

@Transactional na pewno sa, nie mam nigdzie tego umieszczonego to nie podam ci linka, moge podrzucic jako kod dowolny plik ok?

0

Ech no jak nie chcesz udostępniać to zrób PoC jakieś. Prosty i krótki kod który prezentuje ten sam błąd. Przy okazji możesz popatrzyć na to: https://github.com/Pharisaeus/SpringScaffoldApplication i porównać co masz inaczej (z dokładnością do różnicy że masz gołe Hibernate a nie JPA)

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0