konto usunięte

Temat: Encje bez akcesorów [Hibernate]?

Witam,
Czy korzystując z Hibernate jestem zmuszony do tworzenia getterów/setterów? To, że mogę je zrobić prywatne to w pewnym sposób akceptowalne rozwiązanie, ale czy jest jakaś możliwość aby je całkowicie pominąć?
Dodatkowo chciałem jeszcze zapytać o metody (set/get) dotyczące relacji, czy one muszą być publiczne? Można wymusić jakoś inny typ widoczności? Albo czy jest szansa w ogóle je wyeliminować?

konto usunięte

Temat: Encje bez akcesorów [Hibernate]?

jeżeli używasz adnotacji, możesz adnotować zmienne/referencje. Gettery/settery nie będą potrzebne.

konto usunięte

Temat: Encje bez akcesorów [Hibernate]?

A jakiś prosty przykład? Bo wszystko co wcześniej znalazłem w sieci pokazuje jak używać adnotacji, ale są raczej w charakterze definicji. Zakładam, że po prostu źle szukam albo nie umiem sformułować dobrego pytania.

mogę liczyć na prezentacje na prostej klasie:) Albo jakiś link:)

public class Person {
private Long id;
private String title;
}


PS: Co do widoczności relacji to pytania nie było. Mój błąd:P
Łukasz D.

Łukasz D. Software Developer,
DevOps Fan

konto usunięte

Temat: Encje bez akcesorów [Hibernate]?


@Entity
@Table(name="persons")
public class Person {
@Id
@GeneraterValue
private Long id;

private String title;
}


i tyle. Adnotacja nad polem "title" nie jest już obowiązkowa, pod warunkiem że kolumna też nazywa się "title", jeśli np. chcesz zmienić nazwę kolumny używasz adnotacji @Column(name="custom_title") itd. Ogólnie polecam oficjalną dokumentację hibernate, link podał Łukasz Dziedziul. Nie powinieneś mieć z tym problemów.

konto usunięte

Temat: Encje bez akcesorów [Hibernate]?

Dzięki:) I za linka i za przykład. Widziałem te adnotacje przy metodach i nie pomyślałem, że mogę ich spróbować użyć przy atrybutach:)

Cóż, człowiek całe życie się uczy.

konto usunięte

Temat: Encje bez akcesorów [Hibernate]?

ważne jest też, żebyś "nie mieszał" :) tzn. jeśli już stosujesz adnotacje przy atrybutach/referencjach, to nie używasz ich już w tej samej klasie przy metodach. I na odwrót.

konto usunięte

Temat: Encje bez akcesorów [Hibernate]?

To oczywiste, ale dzięki za radę:)
Choć z drugiej strony wydaje mi się, że potrzeba akcesorów jest na tyle rzadka, że nawet i bez niej (Twojej rady) ciężko byłoby mi popełnić błąd. Po prostu chciałem je wyeliminować z kodu, bo do niczego mi aktualnie nie są potrzebne.

Jeszcze raz dzięki:)
Grzegorz Gajos

Grzegorz Gajos Founder of Open
Tangerine

Temat: Encje bez akcesorów [Hibernate]?

Spróbuj tego: http://projectlombok.org/, wygląda niewinnie, ale działa świetnie (już nigdy nie napiszę gettera/settera).Grzegorz Gajos edytował(a) ten post dnia 19.04.13 o godzinie 09:00
Marcin Mroczkowski

Marcin Mroczkowski Programista JAVA/JEE

Temat: Encje bez akcesorów [Hibernate]?

Grzegorz G.:
Spróbuj tego: http://projectlombok.org/, wygląda niewinnie, ale działa świetnie (już nigdy nie napiszę gettera/settera).

Od dawna szukałem czegoś, co oczyści kod z boilerplate kodu. Lombok jest fajny, jedyny problem to kolejna zależność i kolejne adnotacje, które też dla czytelności nie są obojętne. Moim zdaniem powinna to być wbudowana w IDE funkcjonalność, czyli opcjonalne ukrycie tylko na poziomie edytora tekstu. Nie znalazłem plugina, który by to potrafił.

konto usunięte

Temat: Encje bez akcesorów [Hibernate]?

Marcin M.:
Od dawna szukałem czegoś, co oczyści kod z boilerplate kodu. Lombok jest fajny, jedyny problem to kolejna zależność i kolejne adnotacje, które też dla czytelności nie są obojętne. Moim zdaniem powinna to być wbudowana w IDE funkcjonalność, czyli opcjonalne ukrycie tylko na poziomie edytora tekstu. Nie znalazłem plugina, który by to potrafił.

IMHO lepiej mieć adnotację w jednej linijce, która informuje nas "tu był getter/setter ale teraz jest ukryty" niż magiczne ukrycie przez IDE getterów i setterów powodujące myśli "f*ck, gdzie są gettery/settery?".

Sam korzystam z lomboka i hibernate annotations, w moim odczuciu zmienne/referencje otoczone adnotacjami JPA/Lombok są czytelne i łatwe do przeglądania.Andrzej Cichoń edytował(a) ten post dnia 19.04.13 o godzinie 13:42

konto usunięte

Temat: Encje bez akcesorów [Hibernate]?

Osobiście wolałbym aby IDE nie decydowało za mnie, co powinienem oglądać, a czego nie. Nawet gdybym takie rzeczy mógł sam ustawić, to wcześniej czy później znajdzie się jakiś wyjątek.

Zgadzam się w tej kwestii z Andrzejem - lepiej jest mieć jakąś informacje niż być jej pozbawionym. Tym bardziej, że adnotacje domyślnie są wyświetlane w kolorach, które nie przykuwają uwagi i do momentu, gdy nie trzeba ich czytać, to są prawie niezauważalne.Sebastian Malaca edytował(a) ten post dnia 20.04.13 o godzinie 09:08
Marcin Mroczkowski

Marcin Mroczkowski Programista JAVA/JEE

Temat: Encje bez akcesorów [Hibernate]?

Mówiąc o ukrywaniu nie myślałem o kompletnym zatajeniu informacji o getterach/setterach w kodzie. Raczej o ukryciu samych metod i dodaniu jakiegoś oznaczenia obok fieldów, że posiadają akcesory. Edytor tekstu Eclipse (podejrzewam, że w innych IDE jest podobnie) jest bardzo potężny i tylko od programisty plugina zależało by jak ma oznaczać pole z akcesorami.
Uzależniając się od lomboka powodujesz, że każdy pracujący z tobą przy kodzie musi go mieć, znać i używać IDE wspieranego przez lomboka, coś nie za dobrze mi to wygląda, w ciągłej integracji to by była masakra.
W przypadku plugina do edytora tekstu efekt będzie czysto wizualny, a kod będzie w 100% przenośny i wolny od wszelakich udziwnień.
Podsumowując, dało by się zrobić praktycznie to samo pluginem, bez ruszania kodu i classpath.

Btw. nie znam lomboka za dobrze, ciekawi mnie co się stanie jak chcemy ustawić breakpointa w setterze, lub dodać do niego kod, np. logowanie ? da się takie rzeczy zrobić bez problemu ?Marcin Mroczkowski edytował(a) ten post dnia 20.04.13 o godzinie 21:05

konto usunięte

Temat: Encje bez akcesorów [Hibernate]?

Marcin M.:
Btw. nie znam lomboka za dobrze, ciekawi mnie co się stanie jak chcemy ustawić breakpointa w setterze, lub dodać do niego kod, np. logowanie ? da się takie rzeczy zrobić bez problemu ?
odpowiem na to pytanie zaczynając od drugiej części Twojej wypowiedzi, mianowicie nie da się tworzyć w lomobku custom getters/setters. Trzeba już taki getter pisać ręcznie. Nie uważam to za wadę lomboka, bo on robi dokładnie to, co ma robić - skracać klasy o zbędne fragmenty kodu. Standardowy getter/setter = zbędny kod. Chcesz niestandardowy getter/setter ? Napisz go już sam.

A skoro nie można pisać rozbudowanych getterów, więc stosowanie breakpointa w klasie posiadające adnotacje @getter @setter chyba mijają się z celem :D w klasie wywołującej metodę np. w klasie odpowiedzialnej za zdarzenie logowania użytkownika user.setLastLoginDate(...) można już bez problemu ustawić breakpointa.
Marcin Mroczkowski

Marcin Mroczkowski Programista JAVA/JEE

Temat: Encje bez akcesorów [Hibernate]?

Ok, poczytałem i sam sprawdziłem, już wiem jak działa i co potrafi. Szczerze mówiąc nie doceniłem początkowo możliwości tego narzędzia. Jeśli programuje się coś samemu lub w ściśle ograniczonym gronie to rzeczywiście lombok wymiata boilerpate szybko i skutecznie.
Jednak nigdy nie polecił bym go w większych projektach, myślę że wtedy może wyrządzić więcej szkód niż pożytku.
Pytałem się o breakpointy na setterach, bo przy użyciu różnorakich frameworków (np. JSF,Struts) dość często istnieje potrzeba namierzenia zmiany danych w modelu/widoku. Frameworki używają refleksji do wywoływania setterów, więc bez zaczepienia się o sam setter nie znajdziesz rzeczywistej przyczyny zmiany.

Następna dyskusja:

Java/J2EE/Spring/Swing/Hibe...




Wyślij zaproszenie do