To make a long story short, you should not use transactions within a parallel stream. This is because each thread in the parallel stream has its own name thus it does participate in the transaction.
Подход разумный, но ведь здесь мы ничего не записываем в БД. Она пополняется вручную и программно используется только для чтения. Проблема в том, что в compile-time не известно, сколько полей находится в таблице.
Проблема в том, что в compile-time не известно, сколько полей находится в таблице.
Map<String, String>
.
Никаких проблем. Только какую проблему Вы предлагаете решить таким образом?
Я решил хранить все это в таблице БД. Ключ это ссылка на страницу,
Если XPath не задан, значит на странице нет этого значения, и в выходных данных не должно быть упоминания о нем.
И теперь я ожидаю, что в таблице students_courses появится связи этого студента с курсами истории и математики. А связь, например, с курсом философии будет удалена. Не помогает ни CascadeType.ALL ни PERSIST ни MERGE.
@Entity
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class Student {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(name = "`name`")
private String name;
@ManyToMany(
cascade = { CascadeType.MERGE, CascadeType.PERSIST }
)
@JoinTable(name = "student_courses",
joinColumns = @JoinColumn(name = "student_id"),
inverseJoinColumns = @JoinColumn(name = "course_id")
)
private List<Course> courses;
}
@Entity
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class Course {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(name = "`name`")
private String name;
@ManyToMany(mappedBy = "courses")
private List<Student> students;
}
@Component
@RequiredArgsConstructor
public class InitDefaultData implements CommandLineRunner {
private final StudentDao studentDao;
@Override
public void run(String... args) throws Exception {
Course philosophy = Course.builder().name("Philosophy").build();
Course arithmetics = Course.builder().name("Arithmetics").build();
Course history = Course.builder().name("History").build();
Course medicine = Course.builder().name("Medicine").build();
List<Course> oldCourses = List.of(
philosophy, arithmetics
);
Student alex = Student.builder().name("Alex").courses(oldCourses).build();
studentDao.save(alex);
List<Course> newCourses = List.of(
history, medicine
);
alex.setCourses(newCourses);
studentDao.save(alex);
}
}
Student alex = Student.builder().name("Alex").courses(oldCourses).build();
studentDao.save(alex);
alex.setCourses(newCourses);
studentDao.save(alex);
По какому принципу JpaRepository обновляет/удаляет/добавляет записи в таблице связей?
System.out.println("Введите дата рождения: ");
int birthDate = scanner.nextInt();
public static void readData() {
Scanner scanner = new Scanner(System.in);
try {
System.out.println("Введите имя: ");
String name = scanner.nextLine();
System.out.println("Введите фамилию:");
String lastName = scanner.nextLine();
System.out.println("Введите дата рождения: ");
int birthDate = scanner.nextInt();
System.out.println("Введите начало год работы: ");
int startWorking = scanner.nextInt();
} catch (InputMismatchException exception){
System.err.println(exception.fillInStackTrace());
}
}
java version "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
C:\Program Files\Java\jdk-15.0.1
After that I tried to install jnius again but the error message said that permission is denied so I ran CMD as administrator and finally installed jnius by typing pip install jnius.
Скорее всего кол-во непрочитанных должно быть индивидуальным для каждого ученика и не нужно его выводить в общем списке. Т.е. ученик "А" не должен видеть кол-во непрочитанных ученика "В". Может быть в зависимости от дизайна можно обойтись одним репитером или нужно например, внутри репитера выывести еще один репитер и т.д. Зависит от того, какой структуры документ в конечном счете нужно получить.
На данный момент, если я правильно себе представляю, то список примерно выводится следующим образом:
А вам нужно туда же добавить еще и учеников.
Чтобы получить вышеуказанную структуру вам нужно репитер вложить в репитер, если об этом речь... И соответственно, получится цикл в цикле. Внешний цикл выводит учителей и кол-во непрочитанных для них, а внутренний список выводит учеников и кол-во непрочитанных для них