Форум программистов, компьютерный форум, киберфорум
Наши страницы
Java EE (J2EE)
Войти
Регистрация
Восстановить пароль
 
aaa4
1 / 1 / 0
Регистрация: 14.10.2015
Сообщений: 8
1

Удаление одной из one-to-one сущностей

10.04.2019, 00:54. Просмотров 286. Ответов 3

Добрый день. У меня есть вопрос по работе со связанными один-к-одному сущностями: если я ставлю каскад all, то удаляются обе при удалении родительской (у меня однонаправленная как я понимаю связь), а как реализовать удаление дочерней сущности? У меня получается это сделать, но дюже громоздкий метод выходит и аж два обращения к базе до непосредственного удаления.

дочерняя сущность
Java
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
package q.w.onetoone;
 
import lombok.*;
 
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
 
@Entity
@Data
@NoArgsConstructor
@RequiredArgsConstructor
@EqualsAndHashCode(onlyExplicitlyIncluded = true)
public class InstructorDetails {
 
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    int id;
    @NonNull
    @EqualsAndHashCode.Include
    String youtubeChannel;
    @NonNull
    String hobby;
}
родительская сущность
Java
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
package q.w.onetoone;
 
import com.sun.istack.internal.NotNull;
import lombok.*;
 
import javax.persistence.*;
 
@Data
@Entity
@NoArgsConstructor
@RequiredArgsConstructor
@EqualsAndHashCode(onlyExplicitlyIncluded = true)
public class Instructor {
 
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    @NonNull
    private String fname;
    @NonNull
    private String lname;
    @NonNull
    @EqualsAndHashCode.Include
    private String email;
    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name="instructor_detail_id")
    private InstructorDetails instructorDetails;
}
мейн класс
Java
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
33
34
35
36
37
package q.w.onetoone;
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
 
 
@SpringBootApplication
public class OneToOneApplication implements CommandLineRunner {
    @Autowired
    InstructorRepository instructorRepository;
    @Autowired
    InstructorDetailsRepository instructorDetailsRepository;
 
 
    public static void main(String[] args) {
        SpringApplication.run(OneToOneApplication.class, args);
    }
 
    @Override
    public void run(String... args) throws Exception {
        instructorRepository.deleteAll(); //clear table
 
        Instructor steve = new Instructor("Steve","Master","email");
        InstructorDetails instructorDetails = new InstructorDetails("BestYouTubeChannel@youtube.com","intercourse research");
        steve.setInstructorDetails(instructorDetails);
 
        instructorRepository.save(steve); //save
 
        Instructor steveFromDB = instructorRepository.findDistinctByEmail(steve.getEmail());
        steveFromDB.setInstructorDetails(null);  //detach???
        instructorRepository.save(steveFromDB);  
        instructorDetailsRepository.deleteAll(); //delete
   
    }
}
БД
Удаление одной из one-to-one сущностей
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.04.2019, 00:54
Ответы с готовыми решениями:

Удаление сущностей active record
Всем хай! Опять я с тупым вопросом! Вот есть у меня класс Product (сущность - active record) и есть...

SQLite+EF несколько сущностей на основе одной модели
Нужно получить две сущности, основанные на одной модели, сохраняющиеся в двух несвязанные друг с...

Каскадное удаление из одной таблицы
Есть такая проблема, на MS SQL 2000 существует таблица, в которой одно из полей является первичным...

Удаление одной записи из таблицы
Добрый вечер! Мне нужно удалить из списка одну запись (строку). String table, table_id; int...

Удаление записи с БД на одной странице
Помогите в написание скрипта для удаления сроки с БД <html> <head> <title></title> </head>...

3
aaa4
1 / 1 / 0
Регистрация: 14.10.2015
Сообщений: 8
12.04.2019, 16:47  [ТС] 2
Спасибо всем, кто консультировал меня по данному вопросу , особенно Чеду Дарби, благодаря видеороликам которого я понял что нужно делать.
Нужен двунаправленный меппинг, т.е. bi-directional one-to-one и пара простых действий.


1) удаляемая_сущность.getСвязанную_сущность().setУдаляемую_сущность(null).
2) repository.delete(удаляемая_сущность).
0
iSmokeJC
Модератор
Эксперт Java
3134 / 1587 / 704
Регистрация: 21.10.2017
Сообщений: 4,820
12.04.2019, 17:12 3
Цитата Сообщение от aaa4 Посмотреть сообщение
Чтобы не перегружать кодом -кину ссылки на гист, если так нельзя отпишите - поправлю.
Можно, но крайне нежелательно, в первую очередь для тебя самого. Зачастую пользователю не хочется ходить из темы по различным ссылкам, тем более посмотреть код. Когда код и картинки прямо перед тобой в теме - это гораздо удобнее. Таким "огромным" кодом ты ничего на форуме не захламишь. Бывают поистине гигантские портянки. И на сторонних ресурсах картинки/листинги могут со временем потеряться и тема лишится первоисточника, т.о. потеряет актуальность для "потомков".
0
aaa4
1 / 1 / 0
Регистрация: 14.10.2015
Сообщений: 8
12.04.2019, 17:17  [ТС] 4
Я понял, спасибо за инфу, не сообразил сам сразу
0
12.04.2019, 17:17
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.04.2019, 17:17

Удаление одной строки из текстового файла
Задача, такая. Надо удалить определенную строку из файла. Использую я вот такой метод, он удаляет...

Удаление столбцов в таблице-объекте одной командой
Добрый день! Прошу подсказать со следующей задачей: Необходимо одним действием удалять ряды...

Как выполнить запрос в одной б.д. на удаление в другой б.д.?
Товарищи возможно ли это? С запросом на добавление никаких проблем - просто указываю таблицу из...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.