2010-04-01 11 views
5

Mam tabelę z 11 kolumnami, ale muszę pobrać tylko 2 z nich w mojej aplikacji, używam kombinacji wiosna/hibernacja/DAO. Na razie mam klasę domen, która zawiera wszystkie 11 pól i plik mapujący, który mapuje wszystkie 11 kolumn w tabeli. Jak korzystać, aby uzyskać tylko 2 z nich nie wszystkie?Uzyskując mniej kolumn z hibernacją

Odpowiedz

10

Albo:

  1. wykorzystują projekcje - Pro: nic dodać - Con: Nie typesafe (wynik jest List wierszy, z których każdy wiersz jest Object[]):

    select f.foo, f.bar from FatEntity f 
    
  2. Wykorzystanie wyrażenie konstruktora w klauzuli SELECT (określona klasa nie musi być jednostką lub mapowana do bazy danych) - Pro: typesafe solution - Con: Więcej klas, chyba że ponownie użyjesz FatEntity jako właściciela, w którym to przypadku wiele pól będzie null:

    select new com.acme.FatEntityDetails(f.id, f.foo, f.bar) from FatEntity f 
    

    Zauważ, że jeśli nazwa klasy jednostka jest określona w klauzuli SELECT NEW, powstałe przypadki podmiotu są w nowego stanie (brak trwałe tożsamości).

  3. Użyj innej jednostki zamapowanej w tej samej tabeli tylko z wymaganymi polami - Pro: Jest to realna jednostka, którą możesz modyfikować i aktualizować - Con: Więcej klas.

    from LightEntity 
    

Główne różnice między # 2 i # 3 są:

  • 2 nie wymaga od posiadacza być podmiot w ogóle.

  • posiadaczem w # 2 może być podmiot odwzorowany na innej tabeli.
  • jeśli # 2 zwróci obiekty, są one w nowym stanie (może to być problem lub nie).
+0

@Pascal Thivent nie mogę po prostu zostawić 2 pola w mojej klasie domeny i pliku mapowania? –

+0

@Gandalf Cóż, myślałem, że ktoś używa innych pól. Jeśli to nie jest prawda, możesz zmienić swój obecny byt. –

+0

Dziękuję za wiele rozwiązań i wyjaśnień, w jaki sposób wymyślić tak? expirience? czytanie książek, szkolenie? Przyjmuję twoją odpowiedź.gdybyś mógł wskazać mi właściwy kierunek, byłoby wspaniale, na przykład: strony internetowe, przykłady, książki. –

6

Spróbuj:

SELECT myEntity.one, myEntity.two FROM MyEntity myEntity 

Można nawet zrobić:

SELECT new MyEntityDescription(myEntity.one, myEntity.two) FROM MyEntity myEntity 

aby uzyskać listę opisów jednostki.

2

Jeśli nie potrzebujesz więcej niż te 2 kolumny tabeli, możesz zmienić mapowanie hibernacji, aby odwzorować tylko te 2 potrzebne kolumny na klasę encji. Mapuj tylko te kolumny tabeli, do których chcesz uzyskać dostęp w swojej aplikacji. Należy pamiętać, że ograniczenia bazy danych w kolumnach "ignorowanych" mogą zostać naruszone, tak jak nie są zerowe ograniczenia, klucze obce lub unikalne ograniczenia.

+0

co z klasą domeny, czy muszę mieć również 2 pola? –

Powiązane problemy