繁体   English   中英

Java返回null而不是对象的列表

[英]Java return List of null instead of object

我有一个我不明白的问题。 我有以下代码:

@Override
public List<MissionProfile> populateFilterMissionProfile(List<Integer> fleet, List<Integer> application, List<Integer> vehicle, List<String> dataSet, List<String> shift, List<String> drchannel, List<String> swVersion, String userName){ 
    //If vehicle is null (so not used into filter) than add the allowed vehicles (for the user) to the query to filter the acquisitions by the allowed applications
    if (vehicle==null) {
        vehicle =fleetHasUserRepository.getAllCarForUser(userName).stream().map(x->x.getIdCar()).collect(Collectors.toList());
    }
    //Retrieve all the acquisitions for the specific parameters
    List<Acquisition> acquisitions = acquisitionRepository.advancedSearch(fleet, application, vehicle, null, dataSet, shift, null, null ,drchannel, swVersion);
    List<MissionProfile> missionProfiles = acquisitions.parallelStream().map(x->x.getMissionProfile()).distinct().collect(Collectors.toList());
    return missionProfiles;
}

此返回的null列表(由Web服务调用,并返回{"status":true,"success":true,"result":[null,null],"error":null}

我在许多其他方法中使用相同的代码,唯一的区别是,其他使用List<String>List<Integer> 我想错误是在advancedSearch方法内部,但是如果我在返回之前放一个System.out.println(missionProfiles) ,或者如果我用eclipse调试看了这个变量,它就可以工作,否则它返回null (即使我写了missionProfiles.size()不起作用,但与missionProfiles.get(0).getidMissionProfile()起作用)
这是数据库代码

@Query("SELECT e "
            + "FROM Acquisition e "
            + " WHERE (COALESCE( :fleet ) is null OR e.car.fleet.fleetName.idFleetName in (:fleet) )"
            + " AND  (COALESCE( :application ) is null OR e.car.fleet.idFleet in (:application) )"
            + " AND (COALESCE( :vehicle ) is null OR e.car.idCar in (:vehicle) )"
            + " AND (COALESCE( :mp ) is null OR e.missionProfile.idMissionProfile in (:mp) )"
            + " AND (COALESCE( :dataset ) is null OR e.dataset in (:dataset) )"
            + " AND (COALESCE( :shift ) is null OR e.shift.idShift in (:shift) )"
            + " AND (:dateFrom is null OR  e.date >= :dateFrom) "
            + " AND (:dateTo is null OR  e.date <= :dateTo) "
            + " AND (COALESCE( :drchannel ) is null OR e.drChannelsConf in (:drchannel) )" 
            + " AND (COALESCE( :swVersion ) is null OR e.swVersion.idSwVersion in (:swVersion) )" )
    List<Acquisition> advancedSearch( @Param(value = "fleet") List<Integer> fleet,
            @Param(value = "application") List<Integer> application,
            @Param(value = "vehicle") List<Integer> vehicle,
            @Param(value = "mp") List<Integer> mp,
            @Param(value = "dataset") List<String> dataSet, 
            @Param(value = "shift") List<String> shift, 
            @Param(value = "dateFrom") Date dateFrom, 
            @Param(value = "dateTo") Date dateTo,
            @Param(value = "drchannel") List<String> drchannel,
            @Param(value = "swVersion") List<String> swVersionn );

我尝试不使用流并使用Thread.sleep(10000)但问题仍然存在。 您看到错误在哪里吗?
这是采集的调试 在此处输入图片说明 这是任务 在此处输入图片说明

这是关于acquisition实体上Lazy初始化的问题。 我添加了这一行

missionProfiles.forEach(x->Hibernate.initialize(x.getMissionProfile()));

return之前

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM