【发布时间】:2018-05-09 14:37:48
【问题描述】:
在我的 Spring Boot 应用程序中,我有一个 Workout 对象,其中包含一个锻炼对象列表。问题是当我尝试更新锻炼时,属于锻炼的锻炼没有被更新。相反,它在数据库中创建新的练习对象。我在下面添加了我的锻炼实体和锻炼实体。任何帮助将不胜感激。
锻炼班:
@Entity
public class Workout {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name = "workout_id")
private List<Exercise> exercises;
public Workout(List<Exercise> exercises) {
this.exercises = exercises;
}
public Workout() {
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public List<Exercise> getExercises() {
return exercises;
}
public void setExercises(List<Exercise> exercises) {
this.exercises = exercises;
}
}
练习课:
@Entity
@Table
public class Exercise {
@Id
@GeneratedValue
private Long id;
private String exerciseName;
private int weight;
private int actualReps;
@ManyToOne
@JoinColumn(name = "workout_id")
private Workout workout;
public Exercise(){}
public Exercise( String exerciseName, int weight, int actualReps) {
this.exerciseName = exerciseName;
this.weight = weight;
this.actualReps = actualReps;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getExerciseName() {
return exerciseName;
}
public void setExerciseName(String exerciseName) {
this.exerciseName = exerciseName;
}
public int getWeight() {
return weight;
}
public void setWeight(int weight) {
this.weight = weight;
}
public int getActualReps() {
return actualReps;
}
public void setActualReps(int actualReps) {
this.actualReps = actualReps;
}
}
控制器:
@Controller
public class WorkoutController {
@Autowired
private WorkoutService workoutService;
@Autowired
private OneRepMaxService oneRepMaxService;
@Autowired
private ActualRepsService actualRepsService;
@Autowired
private PercentageService percentageService;
@Autowired
private ExerciseService exerciseService;
@RequestMapping("/")
@SuppressWarnings("unchecked")
public String showWorkout(Long id, Model model,Workout workout){
Workout firstWorkout = workoutService.findById(Long.valueOf(83));
model.addAttribute("firstWorkout",firstWorkout);
model.addAttribute("workout",workout);
return "workout";
}
@RequestMapping(value="/workoutLogs", method = RequestMethod.POST)
public String saveWorkout(@ModelAttribute Workout workout,Model model) {
workoutService.saveNewWorkout(workout);
return "redirect:/workoutLogs";
}
@RequestMapping("/workoutLogs")
public String showAllSavedWorkoutLogs(Model model){
return "WorkoutLogs";
}
}
锻炼道:
@Repository
public class WorkoutDaoImpl implements WorkoutDao {
@Autowired
SessionFactory sessionFactory;
@Override
@SuppressWarnings("unchecked")
public List<Workout> findAll() {
Session session = sessionFactory.openSession();
List<Workout> workouts = session.createCriteria(Workout.class).list();
session.close();
return workouts;
}
@Override
public Workout getFirstWorkoutExerciseName(Long id) {
return null;
}
@Override
public Workout getWorkout() {
return null;
}
@Override
public Workout findById(Long id) {
Session session = sessionFactory.openSession();
Workout workout = session.get(Workout.class,id);
Hibernate.initialize(Workout.class);
return workout;
}
@Override
public void save(Workout workout) {
Session session = sessionFactory.openSession();
// Begin a transaction
session.beginTransaction();
// Save the category
session.saveOrUpdate(workout);
// Commit the transaction
session.getTransaction().commit();
// Close the session
session.close();
}
@Override
public void delete(Workout workout) {
}
}
【问题讨论】:
-
您手动编写这些 DAO 而不是使用 Spring Data 自动生成它们有什么特别的原因吗?
-
没有什么特别的原因,这只是我被教导的方式,我没有将弹簧数据添加到我的项目中。我正在使用 Spring Boot。
标签: java hibernate spring-boot mapping