Spring boot 始终在unitTest JPA/Hibernate中获取空对象

Spring boot 始终在unitTest JPA/Hibernate中获取空对象,spring-boot,hibernate,jpa,junit,spring-data-jpa,Spring Boot,Hibernate,Jpa,Junit,Spring Data Jpa,我目前正在尝试我的函数是否与我当前的数据库一起工作,但我一直得到一个空对象。我的测试如下: @Test public void findJobOfferByIdReturnsCorrectJobOffer() { User user = UserBuilder.anUser().build(); JobOffer firstJobOffer = JobOfferBuilder.aJobOffer() .withId(108

我目前正在尝试我的函数是否与我当前的数据库一起工作,但我一直得到一个空对象。我的测试如下:

@Test
    public void findJobOfferByIdReturnsCorrectJobOffer() {
        User user = UserBuilder.anUser().build();

        JobOffer firstJobOffer = JobOfferBuilder.aJobOffer()
                .withId(108L)
                .withCompany(user)
                .build();

        JobOffer secondJoboffer = JobOfferBuilder.aJobOffer()
                .withAmountPerSession(55)
                .withCompany(user)
                .withId(208L)
                .withJobDescription("Software Tester in PHP")
                .build();

        userDao.saveUser(user);
        jobOfferDao.saveJobOffer(firstJobOffer);
        jobOfferDao.saveJobOffer(secondJoboffer);
        entityManager.clear();
        entityManager.flush();

        Optional<JobOffer> retrievedJobOffer = jobOfferDao.findJobOfferById(firstJobOffer.getId());
        assertTrue(retrievedJobOffer.isPresent());
        JobOffer jobOffer = retrievedJobOffer.get();

        assertEquals(jobOffer.getId(), firstJobOffer.getId());
        assertNotEquals(jobOffer.getId(), secondJoboffer.getId());
    }
@NamedQuery(name = "findJobOfferById", query = "SELECT j from JobOffer j WHERE j.id = :jobOfferId"),
尝试调试时,我得到以下结果:

@Test
    public void findJobOfferByIdReturnsCorrectJobOffer() {
        User user = UserBuilder.anUser().build();

        JobOffer firstJobOffer = JobOfferBuilder.aJobOffer()
                .withId(108L)
                .withCompany(user)
                .build();

        JobOffer secondJoboffer = JobOfferBuilder.aJobOffer()
                .withAmountPerSession(55)
                .withCompany(user)
                .withId(208L)
                .withJobDescription("Software Tester in PHP")
                .build();

        userDao.saveUser(user);
        jobOfferDao.saveJobOffer(firstJobOffer);
        jobOfferDao.saveJobOffer(secondJoboffer);
        entityManager.clear();
        entityManager.flush();

        Optional<JobOffer> retrievedJobOffer = jobOfferDao.findJobOfferById(firstJobOffer.getId());
        assertTrue(retrievedJobOffer.isPresent());
        JobOffer jobOffer = retrievedJobOffer.get();

        assertEquals(jobOffer.getId(), firstJobOffer.getId());
        assertNotEquals(jobOffer.getId(), secondJoboffer.getId());
    }
@NamedQuery(name = "findJobOfferById", query = "SELECT j from JobOffer j WHERE j.id = :jobOfferId"),

在测试中,您不应该给出自己的ID。请使用以下方法更改:

.withId(null)
在DAO中,您必须坚持jobOffer并实际添加它。使用“合并”可以修改它

entityManager.persist(jobOffer);