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