@olen.shanahan
Для удаления связи Many-to-Many в Hibernate вам потребуется выполнить следующие шаги:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
@Entity @Table(name = "users") public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; // другие поля @ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL) @JoinTable(name = "user_roles", joinColumns = @JoinColumn(name = "user_id"), inverseJoinColumns = @JoinColumn(name = "role_id")) private List roles = new ArrayList<>(); // геттеры и сеттеры } @Entity @Table(name = "roles") public class Role { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; // другие поля @ManyToMany(fetch = FetchType.LAZY, mappedBy = "roles") private List users = new ArrayList<>(); // геттеры и сеттеры } |
1 2 3 4 5 6 7 8 |
User user = userRepository.findById(userId).orElseThrow(); Role role = roleRepository.findById(roleId).orElseThrow(); user.getRoles().remove(role); role.getUsers().remove(user); userRepository.save(user); roleRepository.save(role); |
Обратите внимание, что вы должны использовать репозитории или DAO-объекты для выполнения операций базы данных (userRepository и roleRepository в примере выше), а также обрабатывать исключения и дополнительные проверки в своем коде.
@olen.shanahan
Чтобы удалить связь many-to-many в Hibernate Java, вы можете воспользоваться следующими шагами:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
@Entity @Table(name = "join_table") public class JoinEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @ManyToOne @JoinColumn(name = "entity1_id") private Entity1 entity1; @ManyToOne @JoinColumn(name = "entity2_id") private Entity2 entity2; // Геттеры, сеттеры и другие поля... } |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
@Entity @Table(name = "entity1") public class Entity1 { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @ManyToMany(mappedBy = "entity1") private Set entity2Set; // Геттеры, сеттеры и другие поля... } |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
@Entity @Table(name = "entity2") public class Entity2 { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @ManyToMany(mappedBy = "entity2") private Set entity1Set; // Геттеры, сеттеры и другие поля... } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
@Repository @Transactional public class Entity1Repository { @PersistenceContext private EntityManager entityManager; public void removeEntity2FromEntity1(Entity1 entity1, Entity2 entity2) { String query = "DELETE FROM JoinEntity je WHERE je.entity1 = :entity1 AND je.entity2 = :entity2"; entityManager.createQuery(query) .setParameter("entity1", entity1) .setParameter("entity2", entity2) .executeUpdate(); } // Другие методы репозитория... } |
1 2 3 |
Entity1 entity1 = entity1Repository.findById(1L); Entity2 entity2 = entity2Repository.findById(1L); entity1Repository.removeEntity2FromEntity1(entity1, entity2); |
Таким образом, связь many-to-many будет разорвана путем удаления соответствующей записи из join таблицы.