当前位置: 首页 > 知识库问答 >
问题:

与存储库相关的方法只返回null值

萧晓博
2023-03-14
@Entity
@Table(name = "matches", schema = "tennis", catalog = "")
public class MatchesEntity {
    private int id;
    private String namePlayer1;
    private String namePlayer2;
    private int setsPlayer1;
    private int setsPlayer2;
    private String odd1;
    private String odd2;
    private String competition;
    private String surface;
    private String status;

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    @Basic
    @Column(name = "Name_player1")
    public String getNamePlayer1() {
        return namePlayer1;
    }

    public void setNamePlayer1(String namePlayer1) {
        this.namePlayer1 = namePlayer1;
    }

    @Basic
    @Column(name = "Name_player2")
    public String getNamePlayer2() {
        return namePlayer2;
    }

    // other getter & setters
}
@Repository
public interface MatchesRepository extends CrudRepository<MatchesEntity, 
Integer> {

     List<MatchesEntity> getAllBySurface(String surface);

}
@Service
public class MatchesService {

@Autowired
MatchesRepository matchesRepository;

public int countMatchesOnHard() {
    return matchesRepository.getAllBySurface("hard").size();
}

public MatchesEntity findMatchById() {
    return matchesRepository.findById(2378).get();
}

}

主类:

 @SpringBootApplication
 @EnableJpaRepositories(basePackageClasses={MatchesRepository.class})
 @EntityScan(basePackageClasses=MatchesEntity.class)
 public class PicksApplication {

     @Autowired
     static MatchesService matchesService;

     public static void main(String[] args) {
         MatchesEntity matchesEntity = matchesService.findMatchById();
         int numberOfMatchesOnHard = matchesService.countMatchesOnHard();
         System.out.println(numberOfMatchesOnHard);
   }
}

我尝试的任何与存储库相关的方法都返回null。有人能帮我提个建议吗?

共有1个答案

连时铭
2023-03-14

您的主类PicksApplication很麻烦。main方法必须触发SpringApplication.run,以便Spring Boot初始化它自己&autowires工作的上下文。您在代码中破坏了所有这些。您可以利用CommandLineRunner并在run()方法中添加代码。

像这样;

@SpringBootApplication
public class PicksApplication implements CommandLineRunner {

    @Autowired
    private MatchesService matchesService;

    public static void main(String[] args) {
        SpringApplication.run(PicksApplication.class, args);
    }

    @Override
    public void run(String... args) throws Exception {
         MatchesEntity matchesEntity = matchesService.findMatchById();
         int numberOfMatchesOnHard = matchesService.countMatchesOnHard();
         System.out.println(numberOfMatchesOnHard);
    }
}

那么它应该可以工作了,其余的代码看起来还可以

 类似资料:
  • 我刚开始使用Spring和JPA/Hibernate,我会拔下我的头发。 这是我的: 谢谢你的帮助。

  • 我正在测试一个具有MongoDB ReactiveMongoRepository回购依赖项的服务。我正在使用@mockbean来注入mock存储库。4个中只有1个定义when().thenreturn()工作,其余的在运行单元测试时生成null。代码如下: testSave工作正常。以下是服务代码:

  • java java 在TaskServiceImpl.java.FindAll(pageRequest)中返回NULL。我不太熟悉Mockito,想知道用它创建模拟存储库是否会导致问题?当我这样做时,它工作得很好。findall()没有分页。我使用PagingAndSortingRepository中的findAll(Pageable)方法有问题吗?谢了!

  • 我试图测试一个服务方法,但为了做到这一点,我必须模拟我的ReportRepository。除了对Include方法的调用使模拟返回为NULL外,其他操作都很好。 下面返回预期的报告: 但该服务实际上执行以下操作: 问题是,当我在模拟中包含'include'方法时,返回的是null而不是预期的报告,因此我的测试以:

  • 我试图模拟一些方法调用,但不幸的是我一直返回null。你能帮我指出我可能出错的地方吗?我正在使用time(). thenBack(),我觉得我正确地模拟了返回变量。事先非常感谢。我是JUnit和Mockito的新手,所以如果我错过了任何明显的东西,我很抱歉。 ServiceTest.java Service.java

  • 此示例存储库有一个方法 现在不需要使用Robolectric来单元测试了吗?