2012-05-16 9 views
5

Używam wiosny 3.0.6, jpa 2.0, hibernacji 3.6.8. Moje pytanie brzmi: w jakich sytuacjach javista jest używany do tworzenia "proxy" dla EntityClass? A co jest przyczyną tego pośrednika? Mam następujące jednostki:Kiedy ulepszane są Jednostki-Klasy i po co? jpa, wiosna, hibernacja, javassist

@Entity 
public MyEntity{ 
.. 

    @ManyToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name = "adresseID") 
    private Adresse adresse; 

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "myEntity") 
    private List<Parameter> parameters; 

.. 
} 

Kiedy załadować MyEntity z DB klasa jednostki jest czymś MyEntity __ $$ _ javassist. Dlaczego to się robi? Po co? Myślę, że można tu użyć zwykłej klasy MyEntity.

celu realizacji leniwy załadunku, możemy:

  • dla @OneToMany - PersistenceBag można stosować tutaj
  • dla @ManyToOne - tutaj należy stosować "enchancedClass" jak Adress_ $$ _javassist

Jaki jest powód wzbogacania MyEntity? Gdzie mogę przeczytać coś więcej na ten temat? Którą książkę/artykuł/blog możesz polecić mi?

Odpowiedz

4

Głównym powodem, dla którego klasy encji są udoskonalone, jest to, że JPA (lub Hibernate) musi śledzić stan obiektów obiektu.

W szczególności JPA musi mieć świadomość, że pole danego obiektu jest "brudne" - zostało zmodyfikowane przez użytkownika, ale zmiana ta nie została jeszcze odzwierciedlona w bazie danych, więc JPA musi zsynchronizować to z bazą danych po zatwierdzeniu transakcji.

Innym przypadkiem jest "załadowany" stan pola encji. Każde pole można przypisać do leniwego załadowania. Kiedy takie pole ma być użyte, JPA musi mieć świadomość, że zapytanie bazy danych musi zostać wykonane, aby zainicjować wartość tego pola.

Domyślnym ustawieniem hibernacji jest użycie ulepszenia środowiska wykonawczego - proxy jest po prostu podklasą jednostki z dodatkowymi dodatkami.

Niektóre ogólne pomysły zostały przedstawione jako here.

Powiązane problemy