hibernate. связь с таблицами по составному ключу

есть 3 таблицы.

  • таблица students:
    CREATE TABLE `students` (
      `id` int unsigned NOT NULL AUTO_INCREMENT,
      `name` varchar(45) DEFAULT NULL,
      `age` int unsigned DEFAULT NULL,
      `registration_date` datetime DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=101 DEFAULT CHARSET=utf8mb3
  • таблица courses:
    CREATE TABLE `courses` (
      `id` int unsigned NOT NULL AUTO_INCREMENT,
      `name` varchar(500) DEFAULT NULL,
      `duration` int unsigned DEFAULT NULL,
      `type` enum('design','programming','marketing','management','business') DEFAULT NULL,
      `description` varchar(500) DEFAULT NULL,
      `teacher_id` int unsigned DEFAULT NULL,
      `students_count` int unsigned DEFAULT NULL,
      `price` int unsigned DEFAULT NULL,
      `price_per_hour` float DEFAULT NULL,
      PRIMARY KEY (`id`),
      KEY `teacher_id_idx` (`teacher_id`),
      CONSTRAINT `teacher_id` FOREIGN KEY (`teacher_id`) REFERENCES `teachers` (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=47 DEFAULT CHARSET=utf8mb3
  • таблица subscriptions:
    CREATE TABLE `subscriptions` (
      `student_id` int unsigned DEFAULT NULL,
      `course_id` int unsigned DEFAULT NULL,
      `subscription_date` datetime DEFAULT NULL,
      KEY `student_id_idx` (`student_id`),
      KEY `course_id_idx` (`course_id`),
      CONSTRAINT `course_id` FOREIGN KEY (`course_id`) REFERENCES `courses` (`id`),
      CONSTRAINT `student_id` FOREIGN KEY (`student_id`) REFERENCES `students` (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3

и классы POJO:

  • Student:
    @Entity
    @Table(name = "students")
    @Getter
    @Setter
    @ToString
    public class Student {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private int id;
    
        private String name;
        private int age;
        @Column(name = "registration_date")
        private Date registrationDate;
    }
  • Course:
    @Entity
    @Table(name = "courses")
    @Getter
    @Setter
    @ToString
    public class Course {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private int id;
    
        private String name;
    
        private int duration;
    
        @Enumerated(EnumType.STRING)
        @Column(columnDefinition = "enum")
        private CourseType type;
    
        private String description;
    
        @ManyToOne(cascade = CascadeType.ALL)
        private Teacher teacher;
    
        @Column(name = "students_count")
        private int studentsCount;
    
        private int price;
    
        @Column(name = "price_per_hour")
        private double pricePerHour;
    }
  • Subscription:
    @Entity
    @Table(name = "subscriptions")
    @Getter
    @Setter
    @ToString
    @EqualsAndHashCode
    public class Subscription {
        @EmbeddedId
        private StudentCourseKey id;
    
        @Column(name = "student_id", insertable = false, updatable = false)
        private int studentId;
    
        @Column(name = "course_id", insertable = false, updatable = false)
        private int courseId;
    
        @Column(name = "subscription_date")
        private Date subscriptionDate;
    }
  • StudentCourseKey:
    @Getter
    @Setter
    @ToString
    @EqualsAndHashCode
    @Embeddable
    public class StudentCourseKey implements Serializable {
        @Column(name = "student_id")
        private int studentId;
    
        @Column(name = "course_id")
        private int courseId;
    }

в таблице Subscriptions колонки student_id и course_id являются составным ключом

задание = создать связки Student-Subscription и Course-Subscription

в main-е делаю так:

    StudentCourseKey key = new StudentCourseKey();
    Subscription subscription = session.get(Subscription.class, key);
    System.out.println(subscription);

но в консоли пишется:

Hibernate: select s1_0.course_id,s1_0.student_id,s1_0.subscription_date from subscriptions s1_0 where (s1_0.course_id,s1_0.student_id) in((?,?))

связки с таблицами Course и Student не наблюдается.

нужна помощь с налаживанием связок ManyToOne, чтобы на выводе вместо:

Subscription(id=StudentCourseKey(studentId=1, courseId=2), studentId=1, courseId=2, subscriptionDate=2018-01-01 00:00:00.0)

получал примерно такое:

Subscription(id=StudentCourseKey(Student(id=1, name=Фуриков Эрнст, age=18, registrationDate=2016-01-01 00:00:00.0), Course(id=2, name=Мобильный разработчик с нуля, duration=10, type=programming, description=Представляем вашему вниманию шикарный курс Мобильный разработчик с нуля, teacher=Teacher(id=2, name=Яглинцев Владислав, salary=20000, age=19), studentsCount=99, price=138000, pricePerHour=13800.0) ), subscriptionDate=2018-01-01 00:00:00.0)


Ответы (0 шт):