Ustawienie w EclipseLink trybu pobierania danych na LAZY

0

Mam pytanie nie znalazłem metody na globalną zmianę dla aplikacji sposobu pobierania danych parametr fetch w encji, w JEE WEB APPLICATION , ustawienia domyślnego sposobu pobierania danych w EclipseLink, czyli EAGER na LAZY.

Więc zmodyfikowałem wszystkie encje, poniżej przykład jednej encji zrobiłem to automatycznie do wszystkich adnotacji relacji bez względu jakich, dodałem

atrybut fetch=FetchType.LAZY by móc uzyskać w całej aplikacji ten tym pobierania danych.

Czy to podejście jest prawidłowe, czy powstały jednak "głupoty w kodzie".

kod encji przed zmianą ( część pliku )

@Entity
@Table(name = "POZYCJE_WZ")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "PozycjeWz.findAll", query = "SELECT p FROM PozycjeWz p"),
    @NamedQuery(name = "PozycjeWz.findByIdPozycjiWz", query = "SELECT p FROM PozycjeWz p WHERE p.idPozycjiWz = :idPozycjiWz"),
    @NamedQuery(name = "PozycjeWz.findByIdNaglowkaWz", query = "SELECT p FROM PozycjeWz p WHERE p.idNaglowkaWz.idNaglowkaWz = :idNaglowkaWz"),
    @NamedQuery(name = "PozycjeWz.findByNrPozycji", query = "SELECT p FROM PozycjeWz p WHERE p.nrPozycji = :nrPozycji"),
    @NamedQuery(name = "PozycjeWz.findByIlosc", query = "SELECT p FROM PozycjeWz p WHERE p.ilosc = :ilosc"),
    @NamedQuery(name = "PozycjeWz.findByCenaSprzedazyNetto", query = "SELECT p FROM PozycjeWz p WHERE p.cenaSprzedazyNetto = :cenaSprzedazyNetto"),
    @NamedQuery(name = "PozycjeWz.findByStawkaVat", query = "SELECT p FROM PozycjeWz p WHERE p.stawkaVat = :stawkaVat")})
public class PozycjeWz implements Serializable {
    private static final long serialVersionUID = 1L;
    // @Max(value=?)  @Min(value=?)//if you know range of your decimal fields consider using these annotations to enforce field validation
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "ID_POZYCJI_WZ")
    private BigDecimal idPozycjiWz;
    
    @Basic(optional = false)
    @NotNull
    @Column(name = "NR_POZYCJI")
    private short nrPozycji;
    @Basic(optional = false)
    @NotNull
    @Column(name = "ILOSC")
    private BigDecimal ilosc;
    @Basic(optional = false)
    @NotNull
    @Column(name = "CENA_SPRZEDAZY_NETTO")
    private BigDecimal cenaSprzedazyNetto;
    @Basic(optional = false)
    @NotNull
    @Column(name = "STAWKA_VAT")
    private BigDecimal stawkaVat;
    @JoinColumn(name = "ID_NAGLOWKA_WZ", referencedColumnName = "ID_NAGLOWKA_WZ")
    @ManyToOne(optional = false)
    private NaglowkiWz idNaglowkaWz;
    @JoinColumn(name = "ID_POZYCJI_MM", referencedColumnName = "ID_POZYCJI_MM")
    @ManyToOne
    private PozycjeMm idPozycjiMm;
    @JoinColumn(name = "ID_POZYCJI_PZ", referencedColumnName = "ID_POZYCJI_PZ")
    @ManyToOne
    private PozycjePz idPozycjiPz;
    @JoinColumn(name = "ID_TOWARU", referencedColumnName = "ID_TOWARU")
    @ManyToOne(optional = false)
    private Towary idTowaru;









poprawiony kod encji





@Entity
@Table(name = "POZYCJE_WZ")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "PozycjeWz.findAll", query = "SELECT p FROM PozycjeWz p"),
    @NamedQuery(name = "PozycjeWz.findByIdPozycjiWz", query = "SELECT p FROM PozycjeWz p WHERE p.idPozycjiWz = :idPozycjiWz"),
    @NamedQuery(name = "PozycjeWz.findByIdNaglowkaWz", query = "SELECT p FROM PozycjeWz p WHERE p.idNaglowkaWz.idNaglowkaWz = :idNaglowkaWz"),
    @NamedQuery(name = "PozycjeWz.findByNrPozycji", query = "SELECT p FROM PozycjeWz p WHERE p.nrPozycji = :nrPozycji"),
    @NamedQuery(name = "PozycjeWz.findByIlosc", query = "SELECT p FROM PozycjeWz p WHERE p.ilosc = :ilosc"),
    @NamedQuery(name = "PozycjeWz.findByCenaSprzedazyNetto", query = "SELECT p FROM PozycjeWz p WHERE p.cenaSprzedazyNetto = :cenaSprzedazyNetto"),
    @NamedQuery(name = "PozycjeWz.findByStawkaVat", query = "SELECT p FROM PozycjeWz p WHERE p.stawkaVat = :stawkaVat")})
public class PozycjeWz implements Serializable {
    private static final long serialVersionUID = 1L;
    // @Max(value=?)  @Min(value=?)//if you know range of your decimal fields consider using these annotations to enforce field validation
    @Id
    @Column(name = "ID_POZYCJI_WZ", columnDefinition = "BigDecimal GENERATED BY DEFAULT AS IDENTITY ")
    @ReturnInsert(returnOnly = true)
    private BigDecimal idPozycjiWz;
    @Basic(optional = false)
    @NotNull
    @Column(name = "NR_POZYCJI")
    private short nrPozycji;
    @Basic(optional = false)
    @NotNull
    @Column(name = "ILOSC")
    private BigDecimal ilosc;
    @Basic(optional = false)
    @NotNull
    @Column(name = "CENA_SPRZEDAZY_NETTO")
    private BigDecimal cenaSprzedazyNetto;
    @Basic(optional = false)
    @NotNull
    @Column(name = "STAWKA_VAT")
    private BigDecimal stawkaVat;
    @JoinColumn(name = "ID_NAGLOWKA_WZ", referencedColumnName = "ID_NAGLOWKA_WZ")
    @ManyToOne(fetch=FetchType.LAZY, optional = false)
    private NaglowkiWz idNaglowkaWz;
    @JoinColumn(name = "ID_POZYCJI_MM", referencedColumnName = "ID_POZYCJI_MM")
    @ManyToOne (fetch=FetchType.LAZY)
    private PozycjeMm idPozycjiMm;
    @JoinColumn(name = "ID_POZYCJI_PZ", referencedColumnName = "ID_POZYCJI_PZ")
    @ManyToOne (fetch=FetchType.LAZY)
    private PozycjePz idPozycjiPz;
    @JoinColumn(name = "ID_TOWARU", referencedColumnName = "ID_TOWARU")
    @ManyToOne(fetch=FetchType.LAZY, optional = false)
    private Towary idTowaru;

Dziękuję serdecznie

3

Jak mówiłem, że annotacje JPA są inspirowane przez średniowieczne traktaty to niektórzy nie wierzyli. Porównajcie stosunek preambuły do treści właściwej.

Przeto my, Kazimierz z Bożej Łaski król Polski i pan dziedziczny ziem krakowskiej, sandomierskiej, sieradzkiej, łęczyckiej, kujawskiej i pomorskiej, podając do wiecznej pamięci, zawiadamiamy wszystkich i każdego z osobna, tak teraz żyjących jak i w przyszłości, którzy treść niniejszego pisma będą czytać, że, ponieważ powinniśmy z urzędu królewskiego nam danego przez Boga pomnażać coraz bardziej pożytki naszego królestwa, by stąd dochód teraźniejszy i przyszły wzrastał dla nas i dla naszych następców, biorąc nadto pod uwagę stałą i niezwykłą mądrość przezornych mężów Jana zwanego @NamedQuery( name="Kiesselhuth and Konrada" query="jego towarzysza, im obu i każdemu z nich oddzielnie"), nadaliśmy, dajemy i udzielamy na podstawie dojrzałej rady naszych baronów pewną równinę u stóp grodu powszechnie zwanego Bidgoszczą, niezajętą i opuszczoną, dla założenia lub zasadzenia tam miasteczka lub miasta, posiadającego i przestrzegającego prawa niemieckiego magdeburskiego, które to miasto winno nazywać się :
public class Kunigesburg.

A co do pytania w JPA związki xToOne są domyślnie EAGER a xToMany LAZY.

0

W opisie EclipseLink pisze, że domyślnie jest EAGER, nie zanaczali tej różnicy w relacjach ?

0

Na pewno warto wiedzieć, jaki tryb jest domyślny, ale jednak kod jest bardziej czytelny, gdy napisze się wprost przy każdej adnotacji, jakiego typu fetcha się oczekuje.

0

dziękuję serdecznie

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