На самом деле, смущенный тем, как один из многих работает в JPA, все документы, которые я читаю, используют как один, так и много один в своем примере, и я не знаю, нужны они или нет нет, и это не сработает, когда я попробовал.JPA Hibernate от одного до большого числа
Мой вопрос: предположим, что у меня есть две таблицы, и я хочу заполнить объект колледжа с помощью метода findCollegeData(), чтобы весь ученик этого колледжа был в списке, когда я инициализирую объект.
Ниже приводится мой подход. Я могу хранить всех студентов в списке колледжей с помощью метода storeCollegeData(), но я не могу полностью восстановить объект колледжа, список учеников всегда пуст, хотя данные находится в базе данных, и он работает, если я пытаюсь самостоятельно искать ученика, используя имя колледжа.
public static EntityManager entityManager = something;
@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
public College {
@Id
@GeneratedValue(strategy= GenerationType.AUTO)
private int cId;
private String collegeName;
private int numOfStudent;
@OneToMany(mappedBy="collegeName", cascade=CascadeType.ALL, orphanRemoval=true)
private List<Student> studentList = new ArrayList<>();
}
@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
public Student {
@Id
@GeneratedValue(strategy= GenerationType.AUTO)
private int sId;
private String name;
private String collegeName;
private String city;
}
// college.getStudentList is always empty and I don't know why
public findCollegeData(String collegeName) {
College college = entityManager.find(College.class, collegeName);
}
// Student data in the studentList are inserted into student table
public storeCollegeData(College college) {
entityManager.persist(college);
}
// This method works
public findStudent(String collegeName) {
CriteriaBuilder cb = provider.get().getCriteriaBuilder();
CriteriaQuery<Student> query = cb.createQuery(Student.class);
Root<Student> student = query.from(Student.class);
query.where(
cb.and(
cb.equal(student.get("collegeName"), collegeName)
)
);
JobStatisticDB Student = provider.get().createQuery(query).getSingleResult();
}
Мне что-то не хватает ??? Является ли соединение более подходящим, чем карта здесь ??? Я не знаю Ват делать человеку
Редакцией: Понял работать, изменяя оба collegeName в качестве первичного ключа таблицы, добавив @Id аннотацию, однако, хотя, как я могу добавить Sid и ИДС в таблицы, чтобы они могли иметь дублирующее название колледжа ???? Прямо сейчас, я не могу дублировать колледж с тем же именем, и студент, который поступает в тот же колледж!
Final Отредактировано: Изменен дизайн базы данных для использования ключа см решения иностранного ниже
, но у меня нет столбца FK, хотя я просто хочу присоединиться к ним в том же coloum, который я указал. В этом случае я хочу, чтобы они присоединились к имени колледжа coloum –
Редизайн вашей базы данных. Hibernate - это объект-реляционный сопоставитель. В настоящее время у вас нет реляционной базы данных. –
Получил это, чтобы работать, спасибо –