wstawianie spring beana z zasięgiem sesji do bazy danych

0

@Bean
@Scope(value = WebApplicationContext.SCOPE_SESSION, proxyMode = ScopedProxyMode.TARGET_CLASS)
public Order ShoppingBag(){
  return new Order();
}

Mam bean z zasięgiem sesji i czy mógłbym to jakoś wrzucić do bazy danych bez przepisywania pól do nowego Zamowienie()? Na razie to jeszcze nie ogarniam proxy w springu, tylko te zasięgi, ale muszę tego użyć

1

To mi wygląda na problem XY: https://en.wikipedia.org/wiki/XY_problem

Napisz, co chcesz osiągnąć.
Zapisywanie beanów zarządzonych przez Springa jest możliwe, ale zazwyczaj to jest bardzo słaby pomysł.

1
masterkwi napisał(a):

Mam bean z zasięgiem sesji i czy mógłbym to jakoś wrzucić do bazy danych bez przepisywania pól do nowego Zamowienie()? Na razie to jeszcze nie ogarniam proxy w springu, tylko te zasięgi, ale muszę tego użyć

Czy to jest jakiś Twój projekt, na którym się uczysz? Czy może jest to projekt na studiach, kursie? A może jakieś zadanie w pracy?

W drugim przypadku, polecam zapytać prowadzących, których zadaniem powinno być odpowiednie wytłumaczenie Ci problemu i ew. wskazanie jakiejś ścieżki, do rozwiązania problemu.

Jeśli to ostatni z przypadków - w zespołach, w których dotychczas pracowałem, nie było problemu, gdy przychodził ktoś i uczył się danego frameworka, języka, paradygmatu itd. Od tego są starsi, bardziej doświadczeni koledzy i koleżanki, żeby wytłumaczyć takiemu początkującemu programiście pewne koncepty. Wszystko jednak z zachowaniem zdrowego rozsądku i poszanowania czasu kolegów, by nie zajmować im co chwilę czasu pytaniami, na które odpowiedź można znaleźć np. w google. Zawsze to lepiej wygląda, gdy przyjdziesz z jakąś propozycją rozwiązania lub przynajmniej choć trochę rozpoznanym tematem, niż z pytaniami "o co tu chodzi?", "jak ja mam to zrobić?".

Jeśli uczysz się sam - najpierw może odpowiedz, w jaki sposób dotychczas "wrzucałeś" dane do bazy danych?

Oczywiście, są pewne rozwiązania pozwalające na zapis takiego obiektu do bazy danych z wykorzystaniem np. ORMów, ale takie rozwiązanie nie jest najładniejsze i nie powinieneś mieszać logiki biznesowej Twojej aplikacji z operacjami IO (nie wspominając o antypatternie Open Session in View i co najmniej kilku innych problemach z tym związanych).

P.S. Możesz również wziąć pod uwagę sugestie od @kixe52, by kod pisać po angielsku i rzeczywiście nazywać metody w sposób odrobinę bardziej mówiący, co robią (+ camelCase). Nazwa beana zakupy mówi niewiele o jego przeznaczeniu.

0
@Bean
@Scope(value = WebApplicationContext.SCOPE_SESSION, proxyMode = ScopedProxyMode.TARGET_CLASS)
public Order ShoppingBag(){
return new Order();
}

//poprawione

Chodzi o to że ładuje do obiektu w sesji obiekt i dzięki temu osoba która jest zalogowana ma koszyk na zakupy

0

brak możliwości edycji @Marooned

2
masterkwi napisał(a):
@Bean
@Scope(value = WebApplicationContext.SCOPE_SESSION, proxyMode = ScopedProxyMode.TARGET_CLASS)
public Order ShoppingBag(){
return new Order();
}

//poprawione

Chodzi o to że ładuje do obiektu w sesji obiekt i dzięki temu osoba która jest zalogowana ma koszyk na zakupy

Możesz użyć encji z Hibernate jako session beana z Springa, jednak to słabe rozwiązanie.

  1. Stworzone w ten sposób obiekty będą z automatu poza kontekstem Hibernate.
  2. Dowolna zmiana na widoku może ci wymusić zmianę w bazie danych (!)

Te dwie rzeczy przysporzą ci sporo kłopotów w przyszłości, lepiej po prostu rozdzielić model widoku od modelu bazodanowego i mapować ręcznie - czyli stworzyć klasę OrderView/OrderDto/OrderMV/cokolwiek do trzymania tego na widoku i stworzyć metodę Order.from(OrderView) .

Jeśli już naprawdę nienawidzisz takiej roboty to możesz użyć jakiejś zabawki w stylu Dozera: https://www.baeldung.com/dozer , chociaż sam staram się unikać automagicznych rozwiązań.
Jeśli mapowanie jest jakoś skomplikowane to Dozer (czy dowolny inny mapper) nie zaoszczędzi czasu. Jeśli mapowanie jest proste, to jest to maksymalnie 2 minuty pracy (zazwyczaj jednak jest to kwestia sekund).

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