2025๋ 5์ 7์ผ
Member โ Team
)member.team_id โ team.id
)๊ด๊ณ ์ข ๋ฅ | ์ค๋ช |
---|---|
ManyToOne | ๊ฐ์ฅ ํํ ๊ด๊ณ. ๋ค์์ ์ํฐํฐ๊ฐ ํ๋๋ฅผ ์ฐธ์กฐ |
OneToMany | ์ค๋ฌด์์ ์ ์ฌ์ฉ๋์ง ์์. ์ถ๊ฐ์ ์ค์ ํ์ |
OneToOne | ๊ฑฐ์ ์ฌ์ฉ๋์ง ์์. ํน์ ์ํฉ์์๋ง ํ์ฉ |
ManyToMany | ๋น์ถ์ฒ. ๋ณ๋ ์ํฐํฐ๋ก ํ์ด๋ด๋ ๊ฒ์ด ์ผ๋ฐ์ |
mappedBy
๋ฅผ ์ด์ฉํด ์ฐ๊ด๊ด๊ณ์ ์ฃผ์ธ(Owner) ์ ์ค์ โ ์ ์ฐ๊ด๊ด๊ณ์ ์ฃผ์ธ์ ์ ํด์ผ ํ ๊น?
์๋ฐฉํฅ ๊ด๊ณ์์๋ ๋ ๊ฐ์ฒด๊ฐ ์๋ก๋ฅผ ์ฐธ์กฐํ์ง๋ง,
DB์ ์ธ๋ ํค๋ ํ๋๋ง ์กด์ฌํ๋ฏ๋ก JPA์๊ฒ ์ด๋ค ์ชฝ์ด ๊ด๋ฆฌ ์ฃผ์ฒด์ธ์ง ์๋ ค์ค์ผ
SQL ์์ฑ ๋ฐ ๋๊ธฐํ์ ํผ๋์ด ์์ต๋๋ค.
@OneToMany
์ฌ์ฉ ์ ์ฃผ์mappedBy
์ค์ ๊ณผ cascade
, orphanRemoval
๋ฑ์ ์ต์
์กฐํฉ์ ์ฃผ์ ํ์package com.example.demo.domain.entity;
import jakarta.persistence.*;
import lombok.*;
@Entity
@Table(name="lend")
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Lend {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne
@JoinColumn(name="bookcode", foreignKey = @ForeignKey(name="FK_LEND_BOOK",
foreignKeyDefinition = "FOREIGN KEY(bookcode) REFERENCES book(bookcode) ON DELETE CASCADE ON UPDATE CASCADE"))
private Book book;
@ManyToOne
@JoinColumn(name="username", foreignKey = @ForeignKey(name="FK_LEND_USER",
foreignKeyDefinition = "FOREIGN KEY(username) REFERENCES user(username) ON DELETE CASCADE ON UPDATE CASCADE"))
private User user;
}
package com.example.demo.domain.repository;
import com.example.demo.domain.entity.Lend;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface LendRepository extends JpaRepository<Lend, Long> {
}
package com.example.demo.domain.repository;
import com.example.demo.domain.entity.Book;
import com.example.demo.domain.entity.Lend;
import com.example.demo.domain.entity.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class LendRepositoryTest {
@Autowired
private LendRepository lendRepository;
@Autowired
private UserRepository userRepository;
@Autowired
private BookRepository bookRepository;
@Test
public void t1() throws Exception {
Book book = bookRepository.findById(3333L).get();
User user = userRepository.findById("user2").get();
Lend lend = new Lend();
lend.setBook(book);
lend.setUser(user);
lendRepository.save(lend); // INSERT
}
@Test
public void t2() throws Exception {
Lend lend = lendRepository.findById(1L).get();
Book book = bookRepository.findById(4444L).get();
lend.setBook(book);
lendRepository.save(lend); // UPDATE
}
@Test
public void t3() throws Exception {
lendRepository.deleteById(1L); // DELETE
}
}
@ManyToOne
, @JoinColumn
์ ํตํด ์ธ๋ ํค ๋ช
์ ๋ฐ ์ ์ฝ ์กฐ๊ฑด ์ค์ @JoinColumn
์ด ์ ์ธ๋ ์ชฝ โ DB์์ ์ฑํฌ ์ฃผ์ฒดJpaRepository
๋ก CRUD ์๋ ๊ตฌํManyToOne
์์ฃผ๋ก ์ฌ์ฉ, OneToMany
๋ ๋ณด์์ ์ฌ์ฉ์ด ์ผ๋ฐ์