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
@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: 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.
#spring #java #naukaprogramowania #hibernate

Witajcie Mireczki, piszę sobie moją pierwszą aplikacje z użyciem Spring + Hibername, a mianowicie Blog. Natrafiłem jednak na przeszkodę z którą nie wiem za bardzo jak sobie poradzić, otóż każdy post (Item) może mieć maksymalnie jeden komentarz (Comment). Pierwszy komentarz się dodaje, natomiast drugi zastępuje ten poprzedni (przy pierwszym jest Insert Into w konsoli, natomiast przy drugim jest już update). Podejrzewam, że coś źle zrobiłem z ustawieniami bazy
@nuker92:
Po 1
zainstaluj sobie plugin .gitignore i wrzuć tam folder .idea i plik IDE .iml
2. W przypadku usera, po co ci ID numeryczne, lepiej zrobić name jako ID.

3. Dlaczego nie oznaczasz encji anotacją @Table a kolumn @Column?

4. Service oznaczaj anotacją @Transactional

5. Pamiętaj że poszczególne bazy danych mają zastrzeżone różne słowa kluczowe, na postgresql przykładowo nie utworzysz tabeli dla entity o nazwie User bo user to
Chcę, aby funkcja zwracała mi pewną listę rekordów z bazy danych na podstawie przekazanych argumentów, które są użyte do zbudowania zapytania SQL. Jeżeli argument jest nullem, powinna zwrócić wszystkie rekordy. Jest jakieś eleganckie rozwiazanie czegoś takiego? Pierwsza myśl to funkcja, która zwraca "*" gdy argument jest pusty(przekazaa do setParameter) albo przechwycenie wyjątku i w bloku catch zwrócenie wszystkich rekordów, ale to chyb dość toporne, da się to jakoś schludnie zrobić?

#java #
@alosha: Tak tak, ale czystej metody nie. Ostatnio dużo w ORMach siedziałem, a głównie w GORm Grailsowym :P Tam się nie martwiłem o nic, jedynie o dobrze zdefiniowaną klasę domainową i dobrym jej zmapowaniem na bazę :P

W każdym razie i tak bym się nie bawił w catche tylko pierwszym sposobem.
Wczoraj pytałem się was jak wrzucić aplikację webową napisaną w javie na serwer, dzięki udało mi się, ale wystąpił pewien problem przy łączeniu się z bazą danych.
Jak widać moja strona rzuca błędami, że nie może ustanowić połączenia z bazą danych.
Lokalnie dostaję takie błędy:


Caused by: org.springframework.transaction.CannotCreateTransactionException: Could not open Hibernate Session for transaction; nested exception is org.hibernate.exception.GenericJDBCException: Cannot open connection

applicationContext wygląda następująco:


domain-classes.hbm.xml

classpath:hibernate.cfg.xml

Czy ktoś z was miał
Hej hej #webdev i #programowanie, przychodzę z ciekawym pytaniem :)
Mam w projekcie (#java, #hibernate, #primefaces, #postgres) jeden widok wyświetlający dane z wielu tabel. Obecnie zaciągam dane hibernatem cały czas, ale coś wolno mi to działa i wpadłem na ciekawy pomysł.

Chciałbym zrobić w bazie widok z potrzebnymi mi danymi (http://www.postgresql.org/docs/9.3/static/rules-materializedviews.html), widok byłby cache'owany, automatycznie przed selectem (czy lepiej po insercie) robiłbym refresha (http://stackoverflow.com/questions/23906977/refresh-a-materialized-view-automatically-using-a-rule-or-notify) i
@MetroStation: kurcze, musialbym kod zdekompilowac, bo ja robie tylko dodatkowe moduly do systemu, ktory opakowuje hibernate swoimi bibliotekami i szczegolow implementacji niestety nie znam. postaram sie sprawdzic jak to w srodku maja skonfigurowane.
@MetroStation: czyli filtrowanie na kliencie robisz? no to faktycznie stronicowanie nic by nie dalo. chyba ze filtrowanie od razu w zapytaniu bedziesz robil... choc pewnie mocno by to skomplikowalo pobieranie danych. wolaj, wolaj, moze uda mi sie skuteczniej pomoc :)
znacie jakieś fajne projekty w Javie ee o różnym stopniu skomplikowania, gotowe już albo nadal w trakcie tworzenia , gdzie jest dobrze opisany kod i są wykorzystywane podstawowe funkcjonalności jak łączenie do baz danych, logowanie itp. Mile widziane wykorzystywane frameworki Spring i Hibernate. Zależy mi żeby kod był dobrze opisany (nawet te proste rzeczy) abym mogł sobie to analizować krok po kroku. prośba o linki do githuba lub gdzieś
#programowanie #naukaprogramowania #
Od niedawna zaczynam przygodę z hibernate - pracuję na instniejącej już bazie danych i po raz pierwszy poważnie trafiłem głową w ścianę. Do rzeczy - posiadam dwie encje - OrderHeader oraz OrderLine. OrderHeader posiada listę OrderLine. Z selectami nie problemów - wszystko ładnie się zwraca. Inserty także śmigają - tutaj fragment OrderDAO:

Boolean addNewOrder(OrderHeader orderHeader) {
Session session = this.sessionFactory.openSession();
try {
session.save(orderHeader);
return true;
} catch (HibernateException e) {
Mam widok SQL zmapowany jako tabela w hibernate, który wyświetlam w formie tabeli. Muszę zmienić wartość jednego z pól. Hibernate akurat w tym wypadku nie pozwala mi zrobić update'u bezpośrednio na widoku. Jak najprościej mogę zachować spójność danych? Czy powinienem po wykonaniu update pobrać znowu wartość danego widoku z bazy? Samo założenie, że update się wykonał raczej jest niewystarczające.

#programowanie #java #mysql #sql #hibernate #spring
@Ghostli: Mówiąc prościej. Masz widok łączący tabele A, B i C. Chcesz zupdatować tabele B. Dajesz do widoku klucz po którym będziesz mógł rozpoznać tabele B. Wykonujesz update na tabeli B dla klucza którego znalazłeś w widoku (wczytujesz dane, updatujesz, zapisujesz w hibernate). Po wyświetleniu widoku będziesz miał uzupełnione dane :)
@eovenn: @Ununoctium: Chociażby dlatego, że update jest wykonywany jako event handler, a nie mogę w tym miejscu modyfikować pola lokalnego funkcji, w której go rejestruję. Z kolei pobranie całej tabeli od nowa to dla mnie duża strata wydajnościowa. Tak poglądowo:

status.setCellValueFactory(new Callback() {
@Override
public ObservableValue call(TableColumn.CellDataFeatures param) {
ProductView productView = (ProductView) param.getValue();
...
checkBox.selectedProperty().addListener((observable, oldValue, newValue) -> {
productView.setStatus(newValue);
productViewDAO.updateProductStatus(productView);
// TODO: jakoś synchronizować widok po updacie z
Mam takie przemyślenia na temat #hibernate i jego używalności. Trochę #gorzkiezale (które chyba już wylewałem kiedyś, ale wyleje jeszcze raz bo mnie boli).

Aktualnie dla mnie największym problemem przy tworzeniu projektu jest gadanie kodu w #java z bazą danych #mssql
Aplikacja oparta jest na #spring i wykorzystuje Spring Data JPA przez Hibernate do komunikacji z bazą. No krew mnie zalewa jak z tego korzystam. Jest idealne do prostego CRUD, trochę bardziej skomplikowane
Nowa wersja Hibernate-orm 4.3.9.Final dzisiaj wyszła. Poniżej spam.

1. Znajdź błąd w #hibernate, smutnazaba.jpg
2. Google
3. Wejdź na Jirę hibernate i znajdź bug report z września ubiegłego roku, notokoniec.png
4. Status:CLOSED O_o
5. Ostani komentarz z wczoraj o treści "Closing in preparation of releasing 4.3.9.Final and 4.2.19.Final."
6. Hura.avi
7. Wejdź na stronę Hibernate, wersja 4.3.9.Final wydana dzisiaj.
8. Aktualizacja zależności
9. Działa. Euforia.gif

Dla zainteresowanych, tworząc EntityGraph z sub
@JavaEngineer: Ja rozumiem to tak, że po prostu EntityManager nadpisze dane w object i w każdym obiekcie zależnym (objectInRelationship) z podanym przez Ciebie CascadeType.
Cache'a swojego nie wyczyści - dlaczego? Object musi być przez niego zarządzany, żeby móc wywołać refresh, więc po prostu zmienią się właściwości niektórych zarządzanych przez EntityManagera obiektów.
Dlaczego ten kod nie chce zaskoczyć?

@Id
@GeneratedValue
private long id;
@Column(name = "Imie", nullable = false)
private String firstName;
@Column(name = "Nazwisko", nullable = false)
private String lastName;
@Column(name = "Adres", nullable = false)
private String address;
@Column(name = "kod_pocztowy", nullable = false)
private String zipCodeAddress;
@Column(name = "Pesel", nullable = false, precision = 11)
private long personalNumber;

Dane są wpisywane przez JTextField, powinien wyskoczyć błąd