Co ten JPA i java odpierdziela? Castuje do listy przechowującej dany typ, a w niej tablica..

0

Mam takie NamedQuery:
screenshot-20181015223537.png
Query się wykonuje i entityManager castuje mi to do listy
screenshot-20181015223417.png
Tylko, że w środku listy zamiast listy obiektów mam tablicę obiektów zawierającą dwa obiekty..
screenshot-20181015223305.png
Co to się odjaniepawla?
Sypie mi się później na mapowaniu...
screenshot-20181015223441.png

błąd:
screenshot-20181015223644.png

Jakim cudem potrafi zrobić cast tablicy do danego typu?

0

Matko boska, weź to przepisz bo z tych obrazków nic się nie da wywnioskować :D

0

NamedQuery:

@NamedQuery(
                name = "Advert.findByUserAndNotExpiredAndActive",
                query = "FROM Advert advert " +
                            "JOIN advert.advertStatuses advertstatus " +
                        "WHERE advert.user.id=:user " +
                            "AND advertstatus.name!=pl.example.advert.enums.AdvertStatusName.INACTIVE " +
                            "AND advertstatus.name!=pl.example.advert.enums.AdvertStatusName.EXPIRED")

Repo:

    public List<Advert> getNotExpiredAdvertsForUser(Long userId) {
        List<Advert> results = entityManager.createNamedQuery("Advert.findByUserAndNotExpiredAndActive")
                .setParameter("user", userId)
                .getResultList();

        return results;
    }
2

A dobra, już rozumiem. Twoje query nie zwraca ci Advert, a obiekt będący parą Advert i AdvertStatuses, wszystko dzięki Joinowi na tabelach. Zamiast zwracania wszystkiego z tabeli, zwracaj po prostu advert. Czyli

SELECT advert FROM Advert advert ...itd.
0

@CountZero, hm ok. A jakbyś wytłumaczył, że java potrafi casta zrobić do List<advert> w takim przypadku?

0

A kto powiedział że robi casta? Cast się robi gdy odwołujesz się do obiektu próbując go mapować i wtedy wywala ci błąd, ClassCastException.

0
 List<Advert> results = entityManager.createNamedQuery("Advert.findByUserAndNotExpiredAndActive")
                .setParameter("user", userId)
                .getResultList();

w tym momencie tego nie robi?

3

Nie, nie castuje. .getResultList() z klasy Query zwraca po prostu List, która bez zdefiniowanego typu może być przypisana do jakiejkolwiek listy.

List a = new ArrayList();
List<String> b = a;
List<Integer> c = a;
List<Void> d = a;
List<LearnJavaBasics> e = a;

To wszystko jest poprawne.

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