Wpis z mikrobloga

Witam ponownie :)

Pisałem w sobotę pod tagami #java #naukaprogramowania #spring #hibernate o mojej pierwszej aplikacji (Blog).
https://github.com/nuker92/MyBlog

Właściwie mam już prawie wszystko co chciałbym zrobić, natomiast mam problem z dwoma rzeczami a chciałbym zapytać o jedną.

1) Mam kontroler: https://github.com/nuker92/MyBlog/blob/master/src/main/java/com/ochodek/blog/controller/UserController.java

a w nim metodę removeComment (na samym dole), do usuwania komentarzy. W metodzie tej jest wywoływana metoda stąd:
https://github.com/nuker92/MyBlog/blob/master/src/main/java/com/ochodek/blog/service/CommentService.java
(do usunięcia komentarza) ale oznaczona adnotacją

@PreAuthorize("#comment.user.name == authentication.name or hasRole('ROLE_ADMIN')")


jednak kiedy wywołuję tą metodę wyskakuje mi błąd, że nie może dostać się do nazwy użytkownika, pełna treść tutaj:
http://pastebin.com/Ksnv8X4M

przyczyną jest chyba LazyInitializationException, ale nie wiem jak sobie z tym poradzić a próbowałem wielu rozwiązań z pierwszych stron google, tutaj są klasy:
comment: https://github.com/nuker92/MyBlog/blob/master/src/main/java/com/ochodek/blog/entity/Comment.java
user: https://github.com/nuker92/MyBlog/blob/master/src/main/java/com/ochodek/blog/entity/User.java

2) Chcę sobie zmienić bazę danych na PostgreeSQL, w tym celu zrobiłem tak jak gościu na tutorialu, czyli w moim applicationContext usunąłem Beany związane z HSQL i wkleiłem to:
http://pastebin.com/8YLtNUu7,

jednak podczas uruchamiania wali mi takim błędem:
http://pastebin.com/gqSGAtkN

i po raz kolejny nie wiem jak sobie z tym fantem poradzić

3) Czy powinienem coś w takiej aplikacji komentować? Wydaje mi się, że nie ma tam nic skomplikowanego, a wszystkie metody mają co najwyżej parę linijek kodu i dla każdej osoby która ma minimalne pojęcie będzie to wszystko zrozumiałe po samych nazwach metod.

Z góry dziękuje za pomoc
  • 5
@nuker92:

1) Prawdopodobnie potrzebujesz open session in view filter lub eager load. Hibernate domyślnie nie wczytuje wszystkich referencji/relacji więc możesz razem z komentarzem doczytywać od razu usera lub skorzystać z obejścia, które podtrzymuje sesję hibernate.

2) Do wczytywania konfiguracji najlepiej użyj tradycyjnego PropertyPlaceholderConfigurer. To, co próbujesz zrobić to ewidentny hack w XML + EL. Możesz wówczas używać składni ${propertyname} w XMLu

3) Komentarze zawsze przydatne w miejscach które są najbardziej mętne.
@nuker92 ogólnie to wyjątki mówią Ci prawie wszystko w pierwszym przypadku to spring security nie może sobie evaluate czyli sparsować i wykonać #comment.user.name == authentication.name or hasRole('ROLE_ADMIN')' masz błąd składni

w drugim wypadku gdzie masz zdefiniowany bean o nazwie dataSource ?

po trzecie to pisz samokomętujący się kod :) czyli jeżeli odczuwasz potrzebę napisania komentarza do kodu to napisałeś brzydki zły kod, który się nie nadaje. Są sytuacje gdzie trzeba napisać komentarz
@badAttitude:
1) Noo tak, nie może sobie sparsować z powodu tego, że nie może dostać się do nazwy użytkownika który napisał komentarz. Ale dobra to mi się udało poprawić

@badAttitude: @splatch:

3) oki

2) A, już się dowiedziałem, że ta konfiguracja którą użyłem działa tylko na heroku, a na localhoscie nie. Teraz mam tylko takie pytanie, jak ustawić bazę danych?

Mam teraz coś takiego:
http://pastebin.com/q57UqqJi

http://pastebin.com/67DwqmPK - plik properities
@nuker92: Potrzebujesz ustawić dla hibernate dialekt, żeby generowało poprawne zapytania dla PostgreSQL. Potrzebujesz property o nazwie 'hibernate.dialect', którego obecnie nie masz ustawionego w jpaProperties.

Trik z URI prawdopodobnie zadziała jeśli ustawisz system property. Możesz to spróbować zrobić przez -DpropertyName=value podczas uruchamiania tomcata.