powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Вопрос по мапингу
8 сообщений из 8, страница 1 из 1
Вопрос по мапингу
    #38705583
JulT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть сущность Client, в ней находится следующее:
Код: java
1.
2.
3.
    @OneToOne
    @JoinColumn(name = "mission_id")
    private Mission mission;


Ей соответствует табличка в БД:
Код: plaintext
1.
client
id  mission_id
Есть сущность Mission:
Код: java
1.
2.
3.
4.
5.
6.
@Entity
@Table(name = "mission")
public class Mission {
.....
    @ManyToOne(optional = false)
    private Client clientInfo;


2 вопроса:
1. что означает (optional = false)
2. почему в сущности Client прописано @OneToOne, ведь у нас одному клиенту может соответствовать множество различных миссий
...
Рейтинг: 0 / 0
Вопрос по мапингу
    #38705587
JulT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
второй вопрос снят, а вот первый остается
...
Рейтинг: 0 / 0
Вопрос по мапингу
    #38705590
JulT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то я совсем запуталась....
Есть две таблицы:
Код: plaintext
1.
client
id mission_id
и:
Код: plaintext
1.
mission
clientInfo_id booked_client_id
Им соответствуют две сущности:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
@Entity
@Table(name = "client")
public class Client {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id")
    private Long id;

    @OneToOne
    @JoinColumn(name = "mission_id")
    private Mission mission;

    @OneToMany
    @JoinColumn(name = "booked_client_id", insertable = true, updatable = true)
    private Set<Mission> bookedMissions = new HashSet<>(); 


И для миссий:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
@Entity
@Table(name = "mission")
public class Mission {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id")
    private Long id;

    @ManyToOne(optional = false)
    private Client clientInfo;


Вопрос: откуда в сущности Client появилась строчка @JoinColumn(name = "booked_client_id", insertable = true, updatable = true)
ведь в таблице client нет поля booked_client_id, оно есть в таблице mission, в то же время в сущности Mission ничего не описано для поля booked_client_id
Помогите пожалуйста разобраться, спасибо.
...
Рейтинг: 0 / 0
Вопрос по мапингу
    #38705604
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JulT1. что означает (optional = false)

То что значение не может быть null. Не должно существовать сущности Mission без сущности Client.

JulT2. почему в сущности Client прописано @OneToOne, ведь у нас одному клиенту может соответствовать множество различных миссий
Это вопрос к автору кода.
...
Рейтинг: 0 / 0
Вопрос по мапингу
    #38705607
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JulTВопрос: откуда в сущности Client появилась строчка @JoinColumn(name = "booked_client_id", insertable = true, updatable = true)
ведь в таблице client нет поля booked_client_id, оно есть в таблице mission, в то же время в сущности Mission ничего не описано для поля booked_client_id
Помогите пожалуйста разобраться, спасибо.
Ассоциации OneToMany, ManyToOne и OneToOne могут быть unidirectional и bidirectional.
unidirectional - ассоциация объявлена только в одной из двух сущностей. Это удобно, чтобы не тащить лишних данных. Например, если коллекция OneToMany очень большая.
bidirectional - ассоциация объявленка в обоих сущностях. Это удобно когда в разных сценариях мы должны из Client получить Mission, а из Mission - ссылку на Client.
FK обычно реализуется в одной из двух таблиц. Либо в связующей таблице.
А вот маппинг должна позволять описывать ассоциацию с любой стороны. Это и приводит к тому, что со стороны Client мы в маппинге указываем ссылку на FK в таблице Mission.
Обратите внимание ещё и на свойства mappedBy в аннотациях. С помощью него можно описать ассоциацию только с одной стороны. А с другой указать, что противоположная сущность уже описывает маппинг ассоциации.
...
Рейтинг: 0 / 0
Вопрос по мапингу
    #38705611
JulT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczJulTВопрос: откуда в сущности Client появилась строчка @JoinColumn(name = "booked_client_id", insertable = true, updatable = true)
ведь в таблице client нет поля booked_client_id, оно есть в таблице mission, в то же время в сущности Mission ничего не описано для поля booked_client_id
Помогите пожалуйста разобраться, спасибо.
Ассоциации OneToMany, ManyToOne и OneToOne могут быть unidirectional и bidirectional.
unidirectional - ассоциация объявлена только в одной из двух сущностей. Это удобно, чтобы не тащить лишних данных. Например, если коллекция OneToMany очень большая.
bidirectional - ассоциация объявленка в обоих сущностях. Это удобно когда в разных сценариях мы должны из Client получить Mission, а из Mission - ссылку на Client.
FK обычно реализуется в одной из двух таблиц. Либо в связующей таблице.
А вот маппинг должна позволять описывать ассоциацию с любой стороны. Это и приводит к тому, что со стороны Client мы в маппинге указываем ссылку на FK в таблице Mission.
Обратите внимание ещё и на свойства mappedBy в аннотациях. С помощью него можно описать ассоциацию только с одной стороны. А с другой указать, что противоположная сущность уже описывает маппинг ассоциации.
Т.е. получается, что в моем случае объявлена ассоциация unidirectional?
...
Рейтинг: 0 / 0
Вопрос по мапингу
    #38705616
JulT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я обычно использовала mappedBy и все было красиво, а здесь дебри какие-то.... Может взять все и переписать через mappedBy...
...
Рейтинг: 0 / 0
Вопрос по мапингу
    #38705619
JulT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хочу переписать. Правильно ли будет сделать так:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
@Entity
@Table(name = "client")
public class Client {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id")
    private Long id;

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "client")
    private List<Mission> mission;


А в сущности Mission написать следующим образом:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
@Entity
@Table(name = "mission")
public class Mission {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id")
    private Long id;
    @ManyToOne
    @JoinColumn(name = "clientInfo_id")
    private Client client;
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Вопрос по мапингу
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]