Îmi este greu să îmi pun testul JUnit să funcționeze. Iată fragmentele de cod. Primul este superclasa mea:

Apoi, există doi descendenți:

Iată scriptul, creând baza de date (o excepție) în PostgreSQL:

Și în cele din urmă cazul testului (o parte din el):

Atenție, acum este strigătul: recordul

întrebare deoarece? 190216.877 D main/JpaMealRepositoryImpl - m = nul

Dacă rulez această interogare în Postgres, înlocuind? cu meal_id (care este 4 așa cum se vede în înregistrare), apoi primesc un rând. Doar un rând așa cum am vrut. De ce em.find (.) Returnează nul ?

ACTUALIZARE

Umple DB-ul cu scriptul refill.sql când încep fiecare clasă de testare:

Iată întrebarea pe care o postez în psql:

Rezultatul este

returnează

2 răspunsuri

Am rezolvat problema în acest fel.

În timp ce scriam, superclasa mea originală era

Soluția se află în strategia de la @GeneratedValue (strategie = GenerationType.IDENTITY). Iată reînnoita IdentifiedEntity:

(@Access (FIELD) este opțional)

În opinia mea, există o EROARE în Hibernate, care se reproduce dacă @GeneratedValue (strategie = GenerationType.IDENTITY) .

În primul rând, testul ar trebui să funcționeze într-un mediu izolat, fără a șterge baza de date la fiecare rulare.

Dacă doriți ca testele să elimine schema dvs. actuală PostgreSQL, ar trebui să utilizați doar proprietatea de configurare Hibernate hibernate.hbm2ddl.auto.

Dacă nu doriți ca Hibernate să modifice schema, atunci nu ar trebui să setați proprietatea hibernate.hbm2ddl.auto.

Cu toate acestea, o să te întorci în fiecare cursă? Cum vei lucra într-un mediu ca acesta?

Mai bine începeți cu o schemă curată, completați-o cu date, efectuați testul și ștergeți-o la final, deoarece nu doriți să lăsați date care ar putea interfera cu alte teste.