[JPA] złączenie tabel

0

Mam następujący problem, używam JPA(nie znam go i na tym glownie polega problem:/) i chciałbym wybrać dane z 2 tabel z bazy danych.
Jedna z tabel ma klucz główny złożony z dwóch pól, konkretnie mam takie tabele w bazie:
OWNER - PK OWNER_ID
FIELD_SHARE - PK OWNER_ID + FIELD_ID

Do entity class wygenerowanej przez środowisko dołączyłem drugą tabelę, także wygląda ona w kluczowaych punktach tak:

@Entity
@Table(name = "FIELD_SHARE")
@SecondaryTable(name= "OWNER")
@NamedQueries({
...
@NamedQuery(name = "myQuery", query = "SELECT f FROM FieldShare f, Owner o WHERE f.fieldSharePK.ownerId=o.ownerId ")
})

public class FieldShare implements Serializable {

}

Problem polega na tym że po wykonaniu zapytania "myQuery" pojawia się:


Internal Exception: java.sql.SQLSyntaxErrorException: Kolumna 'T1.FIELD_ID' nie znajduje się w żadnej tabeli z listy FROM lub pojawia się w specyfikacji łączenia i jest poza zasięgiem tej specyfikacji, albo pojawia się w klauzuli HAVING i nie ma jej na liście GROUP BY. Jeśli jest to instrukcja CREATE lub ALTER TABLE, wtedy 'T1.FIELD_ID' nie jest kolumną w tabeli docelowej.
Error Code: 30000
Call: SELECT t0.OWNER_ID, t1.OWNER_ID, t0.FIELD_ID, t1.FIELD_ID, t0.CREATED_BY, t0.AREA_SHARE, t0.OWNERID, t0.CREATED_ON, t0.ACCOUNT_END, t0.LAST_MODIFY_BY, t0.ACCOUNT_START, t0.LAST_MODIFY_ON FROM FIELD_SHARE t0, OWNER t2, OWNER t1 WHERE ((t0.OWNER_ID = t2.OWNER_ID) AND ((t1.FIELD_ID = t0.FIELD_ID) AND (t1.OWNER_ID = t0.OWNER_ID)))

Problem polega na tym że w wygenerowanym zapytaniu następuje do łączenia tabel OWNER oraz FIELD_SHARE po następujących polach "((t1.FIELD_ID = t0.FIELD_ID) AND (t1.OWNER_ID = t0.OWNER_ID))", tzn dla każdego pola będącego kluczem głównym w tabelce FIELD_SHARE następuje złączenie z tak samo nazywającym się polem w OWNER, a w tabeli OWNER nie ma pola FIELD_ID...

Co zrobić, aby ręcznie ustawić warunek łączenia, tak żeby nie był on generowany, lub co zrobić żeby jakoś to kontrolowac? Próbowałem ustawiać @JoinColumn, ale sypało coś wcześniej się sypalo.

0

Sam sobie odpowiem jak wybrnąć z sytuacji, może się komuś jeszcze przyda ;).

Netbeans generuje Entity class(konkretnie wystarczy wybrać "entity classes from database"), generujemy te klasy dla potrzebnych tabel. Żeby nie było problemów podczas łączenia tabel, wystarczy klucze obce poustawiać (nie zrobiłem tego bo wczesniej korzystalem z bazy ktora na to uwagi nie zwracala :P).

Takie zapytanie zwroci juz zlaczone tabele ;)

@NamedQuery(name = "myQuery", query = "SELECT f FROM FieldShare f")

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