I understand what you said and it seems to be a pretty good idea but I think it is beyond the scope of my project. If I am not wrong I think that having one hierarchy with training programs and training sessions as templates of what runner should do and a second hierarchy with the the same structure holding what runner really does is enough for this project because it will not be in production. That is the reason why I split the model in two parallel hierarchies.
I like your idea of mapping the join table as an entity I wonder if there is any problem in mapping its PK as an auto generated id and having the fk to the other tables in it. On the other hand what you said about having more information of a day, I created an embeddable object called "TrainingDays" in which I store the days of the week as booleans and a method which says if a day is a training day or not (this in the parallel hierarchy of real data). In the "template" hierarchy I have an attribute in the entity "TrainingProgram" called "#SessionsPerWeek" which must be the same as the number of concrete training days in "TrainingDays".
I think this is an easy approach and enough for the purposes of my project. I would like to know what is your opinion about it
.