Hibernate @ManyToOne Cascade работает очень странно ⇐ JAVA
Hibernate @ManyToOne Cascade работает очень странно
У меня есть проект, в котором каждый Студент может быть проверен Тестировщиком, а один тестировщик может протестировать множество студентов.
Мне нужно, чтобы студенты знали своих тестировщиков, поэтому это однонаправленная программа «Многие к одному».
Тестер:
@Entity Тестер публичного класса { @Идентификатор @GeneratedValue(стратегия = GenerationType.IDENTITY) частный длинный идентификатор; @Column (обнуляемый = ложь) частное имя строки; общедоступный тестер (имя строки) { это.имя = имя; } защищенный тестер(){} общедоступная строка getName() { вернуть это.имя; } @Override публичная строка toString() { return String.format("Тестер [id=%s, name=%s]", this.id, this.name); } } Студент:
@Entity Студент публичного класса { @Идентификатор частный длинный идентификатор; //это не должно автоматически увеличиваться @Column (обнуляемый = ложь) частный возраст; @ManyToOne(каскад = CascadeType.PERSIST) @JoinColumn(name = "tester_id") частный тестер-тестер; публичный студент (длинный идентификатор, int age, тестер-тестер) { this.id = идентификатор; this.age = возраст; this.tester = тестер; } защищенный студент(){} публичный int getAge() { вернуть this.age; } общедоступный тестер getTester() { вернуть этот.тестер; } @Override публичная строка toString() { return String.format("Студент [id=%s, age=%s, tester=%s]", this.id, this.age, this.tester); } } Когда я запускаю этот код:
Тестер тестер = новый тестер("Тестер"); Студент студент = новый студент(1L, 27, тестер); this.studentRepository.save(студент); Я ожидаю, что оба объекта будут сохранены из-за каскада, но вместо этого получаю ошибку sql, потому что имя тестера магическим образом равно нулю?!? Если я удалю nullable = false из столбца, объект тестера сохранится, но с нулевым значением в столбце имени... Что, черт возьми, я сделал не так?
Не советуйте сначала сохранять тестер: это не поможет, потому что я хочу понять, что не так с моим кодом.
У меня есть проект, в котором каждый Студент может быть проверен Тестировщиком, а один тестировщик может протестировать множество студентов.
Мне нужно, чтобы студенты знали своих тестировщиков, поэтому это однонаправленная программа «Многие к одному».
Тестер:
@Entity Тестер публичного класса { @Идентификатор @GeneratedValue(стратегия = GenerationType.IDENTITY) частный длинный идентификатор; @Column (обнуляемый = ложь) частное имя строки; общедоступный тестер (имя строки) { это.имя = имя; } защищенный тестер(){} общедоступная строка getName() { вернуть это.имя; } @Override публичная строка toString() { return String.format("Тестер [id=%s, name=%s]", this.id, this.name); } } Студент:
@Entity Студент публичного класса { @Идентификатор частный длинный идентификатор; //это не должно автоматически увеличиваться @Column (обнуляемый = ложь) частный возраст; @ManyToOne(каскад = CascadeType.PERSIST) @JoinColumn(name = "tester_id") частный тестер-тестер; публичный студент (длинный идентификатор, int age, тестер-тестер) { this.id = идентификатор; this.age = возраст; this.tester = тестер; } защищенный студент(){} публичный int getAge() { вернуть this.age; } общедоступный тестер getTester() { вернуть этот.тестер; } @Override публичная строка toString() { return String.format("Студент [id=%s, age=%s, tester=%s]", this.id, this.age, this.tester); } } Когда я запускаю этот код:
Тестер тестер = новый тестер("Тестер"); Студент студент = новый студент(1L, 27, тестер); this.studentRepository.save(студент); Я ожидаю, что оба объекта будут сохранены из-за каскада, но вместо этого получаю ошибку sql, потому что имя тестера магическим образом равно нулю?!? Если я удалю nullable = false из столбца, объект тестера сохранится, но с нулевым значением в столбце имени... Что, черт возьми, я сделал не так?
Не советуйте сначала сохранять тестер: это не поможет, потому что я хочу понять, что не так с моим кодом.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение