我試圖通過 ID 獲取物件,但我無法弄清楚,為什么我得到 null 并且它不起作用..
@Entity
@Table(name = "exercises")
public class ExerciseEntity {
@Id
private Long id;
private String nameOfExercise;
private Integer caloriesBurnedForHour;
@Column(columnDefinition = "TEXT")
private String bonusInfo;
@ManyToMany(mappedBy = "exerciseEntityList",fetch = FetchType.EAGER)
private List<PersonalTrainingProgram> personalTrainingPrograms;
public ExerciseEntity() {
}
@Entity
public class PersonalTrainingProgram {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToMany
@JoinTable()
private List<ExerciseEntity> exerciseEntityList;
@ManyToOne
private FoodProgram foodProgram;
@ManyToOne
private AppUser appUser;
public PersonalTrainingProgram() {
}
這是方法,
@Override
public List<ExerciseEntity> findExercisesBySpecificId(List<ExerciseDto> exerciseDto) {
List<ExerciseEntity> listEntity= new ArrayList<>();
for (int i = 0; i <exerciseDto.size() ; i ) {
ExerciseEntity byId = exercisesRepository.getById(exerciseDto.get(i).getId());
listEntity.add(byId);
}
return listEntity;
}
@Override
public void addItToDatabase(List<ExerciseDto> exerciseDto, FoodProgramDto
foodProgramDto,String username) {
PersonalTrainingProgram personalTrainingProgram = new PersonalTrainingProgram();
personalTrainingProgram.setExerciseEntityList(findExercisesBySpecificId(exerciseDto));
personalTrainingProgram.setFoodProgram(foodProgramService
.findFoodProgramById(foodProgramDto));
personalTrainingProgram.setAppUser(appUserRepository.findByUsername(username).get());
personalTrainingRepository.save(personalTrainingProgram);
}
在除錯模式的練習行之后,我得到這個“{ExerciseEntity$HibernateProxy$B...}”我認為它可能來自關系,但對我來說一切似乎都很好。任何幫助將不勝感激
存盤庫是標準存盤庫,擴展 JPA
uj5u.com熱心網友回復:
您必須使用findById回傳 Optional 的那個。
getById 回傳的不是物體而是參考。
從檔案:
回傳對具有給定識別符號的物體的參考。根據 JPA 持久性提供程式的實作方式,這很可能總是回傳一個實體并在第一次訪問時拋出 EntityNotFoundException。其中一些會立即拒絕無效的識別符號。
所以總是代理可能沒有初始化導致問題
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/345309.html
