gpt4 book ai didi

java - 如何在数据库JAVA中建立两个对象之间的关系

转载 作者:太空宇宙 更新时间:2023-11-04 10:01:41 25 4
gpt4 key购买 nike

我目前正在尝试在我的学生类(class)和我的学科类(class)之间创建关系。这就是我正在做的事情:

@服务公共(public)类 StudentRegistrationService 实现 ApplicationRunner {

private final StudentRepository repository;
private final DisciplineRepository repository1;

public StudentRegistrationService(StudentRepository repository, DisciplineRepository repository1) {
this.repository = repository;
this.repository1 = repository1;
}

@Override
public void run(ApplicationArguments args) throws Exception {


Scanner scanner = new Scanner(System.in);

while (true) {
String input = scanner.nextLine();
String[] split = input.split(" ");

String command = split[0];

switch (command.toUpperCase()) {
case "END":
System.out.println("bye bye");
return;
case "STUDLIST":
printAllStudents();
break;
case "STUDNEW":
String[] studentDetails = Arrays.copyOfRange(split, 1, split.length);
createNewStudent(studentDetails);
break;
case "DISCLIST":
printAllDisciplines();
break;
case "DISCNEW":
String[] disciplineDetails = Arrays.copyOfRange(split, 1, split.length);
createNewDiscipline(disciplineDetails);
break;
case "STUDDISC":
String[] studentAndDisciplineId = Arrays.copyOfRange(split, 1, split.length);
studendAndDiscipline(studentAndDisciplineId);

break;
default:
System.out.println("UNKNOWN command, try again!");
break;
}

}

}


private void createNewDiscipline(String[] details) {
int hours=Integer.parseInt(details[1]);
repository1.save(new Discipline(details[0],hours));
}

private void printAllDisciplines() {

Iterable<Discipline> allDisciplines = repository1.findAll();

for (Discipline discipline : allDisciplines) {
System.out.println(discipline);
}
}

private void createNewStudent(String[] details) {
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd.MM.yyyy");
LocalDate localDate = LocalDate.parse(details[1], dtf);
repository.save(new Student(details[0],localDate));
}

private void printAllStudents() {

Iterable<Student> allStudents = repository.findAll();

for (Student student : allStudents) {
System.out.println(student);
}
}

private void studendAndDiscipline(String[] details) {
int studentId=Integer.parseInt(details[1]);
int disciplineId=Integer.parseInt(details[2]);
Student student=repository.findById(studentId);
Discipline discipline=repository1.findById(disciplineId);
student.addDiscipline(discipline);
}

}

在studentAndDiscipline中,我必须通过ID在学生和学科之间创建关系,但我做错了。我尝试使用Optional<>,但它也不起作用。

我的学生类(class):@实体类(class)学生{

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;


private String name;
private LocalDate enrollmentDate;

@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
List<Discipline> disciplines;


private Student() {
// Required by Hibernate
}
public Student(String name, LocalDate enrollmentDate) {
this.name = name;
this.enrollmentDate = enrollmentDate;
}

void addDiscipline(Discipline discipline) {
this.disciplines.add(discipline);
}

@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", enrollmentDate=" + enrollmentDate +
", disciplines=" + disciplines +
'}';
}

}

我的学科类(class):@实体类(class)纪律{

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;


String name;
int credits;

private Discipline() {
// Required by Hibernate
}
public Discipline(String name, int credits) {
this.name = name;
this.credits = credits;
}

@Override
public String toString() {
return "Discipline{" +
"id=" + id +
", name='" + name + '\'' +
", credits=" + credits +
'}';
}

}

我的学生存储库:

interface StudentRepository extends CrudRepository<Student, Integer> {

}

我的纪律存储库:

interface DisciplineRepository extends CrudRepository<Discipline, Integer> {

}

最佳答案

private void studendAndDiscipline(String[] details) {
int studentId=Integer.parseInt(details[1]);
int disciplineId=Integer.parseInt(details[2]);
Student student=repository.findById(studentId);
Discipline discipline=repository1.findById(disciplineId);
student.addDiscipline(discipline);
}

Discipline discipline=repository1.findById(disciplineId); , 是不正确的。 findById(ID id)将返回Optional<T>类型,您需要使用get()得到T。 你应该确保纪律不为零。至少你需要检查一下

Student student=repository.findById(studentId).get();
Discipline discipline=repository1.findById(disciplineId).get();
if (discipline != null) {
student.addDiscipline(discipline);
System.out.println("Adding discipline to student.");
}

如果您确定纪律不为空,则需要检查 addDiscipline() 实现。

关于java - 如何在数据库JAVA中建立两个对象之间的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53384684/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com