Skip to content

Commit 6856fd5

Browse files
committed
Part 14: Add Chat.java
1 parent de261d7 commit 6856fd5

File tree

1 file changed

+52
-0
lines changed
  • Spring_part_14/src/main/java/spring/oldboy/database/entity

1 file changed

+52
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package spring.oldboy.database.entity;
2+
3+
import jakarta.persistence.*;
4+
import lombok.AllArgsConstructor;
5+
import lombok.Builder;
6+
import lombok.Data;
7+
import lombok.NoArgsConstructor;
8+
9+
import java.util.ArrayList;
10+
import java.util.List;
11+
12+
@Data
13+
@NoArgsConstructor
14+
@AllArgsConstructor
15+
@Builder
16+
@Entity
17+
@Table(name = "chat")
18+
public class Chat implements BaseEntity<Long> {
19+
20+
@Id
21+
@GeneratedValue(strategy = GenerationType.IDENTITY)
22+
private Long id;
23+
24+
@Column(unique = true, nullable = false)
25+
private String name;
26+
27+
/*
28+
Формируем связь между User и Chat (мы не стали организовывать связь Многие-ко-Многим - ManyToMany),
29+
делаем это через промежуточную (связующую) таблицу 'users_chat' см. DOC/SqlScripts/CreateTable.sql.
30+
31+
И так, один Chat будет содержать нескольких User-ов. Мы ушли от связи ManyToMany через связующую
32+
таблицу 'users_chat', в которой каждая запись дает соответствие Chat-a к User-у (или наоборот).
33+
Мы создали отдельную сущность UserChat (для работы с таблицей 'users_chat') которая и будет хранить
34+
данные этого соответствия (соответственно, сущности UserChat-ов хранят множество соответствий
35+
Chat-ов к User-ам).
36+
37+
Как и в сущности User, тут мы реализуем связь OneToMany - один Chat может быть связан с множеством
38+
записей в таблице 'users_chat' или с множеством сущностей UserChat, которые хранят взаимосвязь
39+
User-ов и Chat-ов.
40+
41+
Наша сущность Chat будет хранить список этих взаимосвязей или коллекцию сущностей UserChat.
42+
43+
Естественно в сущности UserChat будет поле хранящее данные о Chat-е и оно будет помечено как
44+
@ManyToOne, т.е. обратной к текущей аннотацией. И конечно, имя этого поля будет - 'chat', что
45+
и указано в параметре картирования - mappedBy = "chat"
46+
47+
Точно такая же ситуация будет и в сущности User см. User.java
48+
*/
49+
@Builder.Default
50+
@OneToMany(mappedBy = "chat")
51+
private List<UserChat> userChats = new ArrayList<>();
52+
}

0 commit comments

Comments
 (0)