Java Hibernate中最后一次迭代覆盖的值

Java Hibernate中最后一次迭代覆盖的值,java,hibernate,list,loops,Java,Hibernate,List,Loops,我有以下实体: 汽车/汽车/汽车/定制到 Car - long carId Vehicle - long vehicleId; Auto - long autoTypeId; CustomDTO - long autoTypeId; - String autoTypeName; - List<Car> cars; public List<Car> getCarByVehicleAndType(long vehicleId, long autoTypeId){ L

我有以下实体: 汽车/汽车/汽车/定制到

Car
- long carId
Vehicle
- long vehicleId;
Auto
- long autoTypeId;
CustomDTO
- long autoTypeId;
- String autoTypeName;
- List<Car> cars;

public List<Car> getCarByVehicleAndType(long vehicleId, long autoTypeId){
    List<Car> cars = new ArrayList<Car>();
    List<Car> carsInCarVehicleType = carService.getCarsInCarVehicleType(vehicleId, autoTypeId); //DAO Fetch cars IN Cat-Vehicle-Type table
    for(Car car : carsInCarVehicleType){
        car.selected(true);
    }
    List<Car> carsNotInCarVehicleType = carService.getCarsNotInCarVehicleType(vehicleId, autoTypeId); //DAO Fetch cars NOT IN Cat-Vehicle-Type table
    for(Car car : carsNotInCarVehicleType){
        car.selected(false);
    }

    cars.addAll(carsInCarVehicleType);
    cars.addAll(carsNotInCarVehicleType);

    return cars;
}

public List<CustomDTO> constructVehicleDTO(long vehicleId){
    List<Auto> autos = autoService.getAutos(); //DAO Fetch all autos
    List<CustomDTO> dtoList = new ArrayList<CustomDTO>();
    for(Auto auto : autos){
        CustomDTO dto = new CustomDTO();
        dto.setAutoTypeId(auto.getAutoTypeId());
        dto.setAutoTypeName(auto.getAutoTypeName());
        dto.setCars(getCarByVehicleAndType(vehicleId, auto.getAutoTypeId());
        dtoList.add(dto);
    }
    return dtoList;
}
汽车
-长龋
车辆
-长车辆;
自动的
-长同源型;
定制
-长同源型;
-字符串自动类型名称;
-列出车辆清单;
公共列表getCarByVehicleAndType(长车辆ID、长自动类型ID){
List cars=new ArrayList();
List carsInCarVehicleType=carService.getCarsInCarVehicleType(vehicleId,autoTypeId);//在Cat车辆类型表中获取车辆
用于(汽车:carsInCarVehicleType){
car.selected(true);
}
List carsNotInCarVehicleType=carService.getCarsNotInCarVehicleType(vehicleId,autoTypeId);//DAO获取不在Cat车辆类型表中的车辆
用于(汽车:汽车TincarveHicleType){
car.selected(false);
}
cars.addAll(carsInCarVehicleType);
cars.addAll(carsNotInCarVehicleType);
返回车辆;
}
公共列表已构建车辆到(长车辆ID){
List autos=autoService.getAutos();//DAO获取所有自动
List dtoList=new ArrayList();
用于(自动:自动){
CustomDTO dto=新CustomDTO();
setAutoTypeId(auto.getAutoTypeId());
setAutoTypeName(auto.getAutoTypeName());
setCars(getCarByVehicleAndType(vehicleId,auto.getAutoTypeId());
dtoList.add(dto);
}
返回数据集成商;
}
在上面的方法中-
dto.setCars(…)
在返回dtoList时被最后一次迭代值覆盖。因此,对于每辆车,我都会得到相同的车列表集。这在普通Java操作中不会发生。我怀疑我在这里混淆了Hibernate对象的生命周期


如果我不清楚,请告诉我。

根据代码,我看不到Hibernate有任何问题。请尝试打印
GetCarbyVehiclandType
方法返回的值,看看这些值是否正确。
ConstructiveVehicledTo
中的列表类型为什么不匹配?您正在创建
list
type的列表并返回
list
。为什么会这样?很抱歉,这是一个错误。我试图简化命名以避免问题中的混淆。您能否显示
getCarbyVehiclandType(vehicleId,auto.getAutoTypeId()
函数返回的值&您是如何调用
ConstructionVehicledTo(long vehicleId)的
?如何显示值?是否重复?