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)

0

@Shalom, ok dziala juz... okazalo sie ze projekt byl nie przebudowany bo z mavenem sie cos zrypalo ze nie budowal tego projektu co potrzeba i nie zapisal moich zmian z dodaniem adnotacji @Transactional. Dzieki za pomoc...

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