Здравствуйте коллеги! Помогите пожалуйста разобраться с проблемкой.
Есть два java класса сущности (@Entity), связанные по @OneToMany:
-Developer
@Entity
public class Developer implements Serializable{
@Id
@GeneratedValue(generator = "default")
@GenericGenerator(name = "default", strategy = "seqhilo")
private Long id;
private String name;
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.PERSIST)
@JoinTable(
name = "dev_skills",
joinColumns = @JoinColumn(name = "dev_id"),
inverseJoinColumns = @JoinColumn(name = "skill_id"))
private Set<Skill> skillSet = new HashSet<>();
private int salary;
private int rank;
public Developer(){
}
-Skill
@Entity
public class Skill implements Serializable{
@Id @Column(name = "skillId")
@GeneratedValue(generator = "default")
@GenericGenerator(name = "default", strategy = "seqhilo")
private Long id;
private String name;
@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER, targetEntity = Developer.class)
protected Developer developer;
public Skill() {
}
}
Добавление и изменение работают хорошо, но никак не могу уйти от проблемы с удалением. Есть реализация, в которой пытаюсь удалить все умения:
Простое удаление через session.delete(Skill) не получается, т.к. сущности связаны таблицей с foreign_key'ами. Поэтому сразу летят ошибки
Пытаюсь удалить через загрузку разработчика, перебор его Set'a умений и поочередного удаления, но при загрузке (load()) разработчиков их Set'ы умений пусты, несмотря на то, что в обоих случаях использую FetchType.EAGER.
@Override
public void clear() {
Session session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
skills = getSkillsFromDB(session);
for (Skill skill : skills){
Developer developer = session.load(Developer.class, skill.getId());
Set<Skill> developerSkills = developer.getSkillSet();
developerSkills.remove(skill);
session.update(developer);
session.delete(session.get(Skill.class, skill.getId()));
}
session.getTransaction().commit();
session.close();
}
Подскажите пожалуйста, что делаю не так...
Давненько не занимался Hibernate, тем не менее:
Попробуйте в таблице Skill, в @manyToOne надо прописать @Join Column
P.S. почему у вас не совпадают идентификаторы join: skillId и skill_id?
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники