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.