SpringBoot,JPA,JPARepository findAll()返回空值

时间:2019-12-25 20:15:53

标签: database spring-boot jpa spring-data-jpa spring-repositories

我决定将Springboot用作Backendframework。但是我在使用JPARepositories时遇到了一些问题。

如果我在HTTP调用中使用findAll方法,一切正常!

但是我也想使用JPARepository来访问我的数据库,而无需调用控制器或HTTP请求..这是我的代码(因为从两天以来我一直在尝试解决这个问题,所以有点混乱)

这是我的代码:

应用程序类:

@EnableJpaRepositories
@SpringBootApplication
public class WebappBackendApplication {

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

JPA实体:

@Entity
@Table(name="t_mitglieder")
public class TMitglieder {
private Long id;
private String mitgliedsnr;
private String mitgliedsart;

存储库:

@Repository
public interface MemberRepository extends JpaRepository<TMitglieder, Long>{
}

用来调用我的存储库的Java类(该类在主应用程序之后立即调用(用于测试问题,因为我不想发出HTTP请求):

public class CommandLineAppStartupRunner implements CommandLineRunner {
@Autowired
private FeeService myService;

@Override
public void run(String...args) throws Exception {
    myService.getYearlyFeeForMember(1,1);

}
}

进行存储库调用的服务:

@Service
public class FeeService {
public Double yearlyFee;

public List<TBeitragstabelle> fees = new ArrayList<>();
public List<TMitglieder> members = new ArrayList<>();

@Autowired
private MemberRepository memberRepository;



public Double getYearlyFeeForMember(int memberID, long year) {

    this.members= memberRepository.findAll(); //returns empty list
    Optional<TMitglieder> mitglieder = memberRepository.findById(Integer.toUnsignedLong(1)); // does not find anything

    System.out.println("members: ");

    for (TMitglieder member : members) {
        System.out.println("--->" + member.getName());
    }


    return yearlyFee;
}
}

为什么我会得到一个空列表?

但是这很好用->由我的WebApplication使用。我只打电话给/ members,发现所有成员:

控制器:

@CrossOrigin(origins = "http://localhost:4200")
@RestController
@RequestMapping("/api/v1")
public class MitgliederController {
private List<TMitglieder> memberList;

@Autowired
private MemberRepository memberRepository;

@GetMapping("/members")
public List<TMitglieder> getAllMember() {
    memberList = memberRepository.findAll();
    return memberList;
}

}

1 个答案:

答案 0 :(得分:0)

您是否可以尝试添加basePackages以启用jpa repo注释和实体扫描注释。 例如:

@EnableJpaRepositories(basePackages = "com.examples.jpa.repositories")

@EntityScan(basePackages = "com.examples.entity")

还添加@EnableAutoConfiguration将扫描给定的程序包以检测实体。