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)