Welcome to the Treehouse Community

Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.

Looking to learn something new?

Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.

Start your free trial

Java

Object is not being updated. Hibernate + Spring

Okay so I have a small web app I’m working on using Spring and Hibernate. The web app is a workout log. I have a Workout object that holds a list of Exercise Objects. The problem is whenever I update the Workout object the ID for the workout object stays the same but the Id for each Exercise object is new. The workout_id inside each Exercise object also stays the same. So every time the Workout objects updates it creates new Exercise Objects instead of just updating them.

@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";

    }



}
@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;
    }
}
@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;
    }
    //for each exercise inside a workout print exercise make it all inputs bind the workout
}

Workout Dao:

@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);
        session.close();
        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) {

    }



}

Could you please post your dao clasess too?

Hey Daniel I've added my WorkoutDao class.