[JPA] Spring Data JPA ๊ตฌํ์ฒด(SimpleJpaRepository) ๋ถ์
by rlaehddnd0422์คํ๋ง ๋ฐ์ดํฐ JPA๊ฐ ์ ๊ณตํ๋ ๊ณตํต ์ธํฐํ์ด์ค ๊ตฌํ์ฒด SimpleJpaRepository๋ฅผ ๋ถ์ํด ๋ด ์๋ค.
@Repository
@Transactional(readOnly = true)
public class SimpleJpaRepository<T, ID> implements JpaRepositoryImplementation<T, ID> {
SimpleJpaRepository๋ ์คํ๋ง ๋ฐ์ดํฐ JPA์ ๊ณตํต ์ธํฐํ์ด์ค ๊ตฌํ์ฒด๋ก
@Repostiory : JPA ์์ธ๋ฅผ ์คํ๋ง์ด ์ถ์ํํ ์์ธ๋ก ๋ณํํฉ๋๋ค.
@Transactional : ํธ๋์ญ์ ์ ์ ์ฉํด JPA์ ๋ชจ๋ ๋ณ๊ฒฝ์ ํธ๋์ญ์ ์์์ ๋์ํ๋๋ก ์ฒ๋ฆฌํฉ๋๋ค.
- ๋ฐ๋ผ์, Spring Data JPA๋ฅผ ์ฌ์ฉํ๋ฉด ์๋น์ค ๊ณ์ธต์์ ํธ๋์ญ์ ์ ์์ํ์ง ์์ผ๋ฉด ์๋์ผ๋ก ๋ฆฌํฌ์งํ ๋ฆฌ์์ ํธ๋์ญ์ ์ ์์ํฉ๋๋ค.
- ์ฌ์ค ๊ตฌํ์ฒด์ @Transactional์ด ๊ฑธ๋ ค ์๋ ๋๋ถ์ ์คํ๋ง ๋ฐ์ดํฐ JPA๋ฅผ ์ฌ์ฉํ ๋ ํธ๋์ญ์ ์์ด๋ ๋ฐ์ดํฐ ๋ฑ๋ก, ๋ณ๊ฒฝ์ด ๊ฐ๋ฅํ์์ต๋๋ค.
Spring Data JPA ์ธํฐํ์ด์ค ๊ตฌํ์ฒด์ save() ๋ฉ์๋
/*
* (non-Javadoc)
* @see org.springframework.data.repository.CrudRepository#save(java.lang.Object)
*/
@Transactional
@Override
public <S extends T> S save(S entity) {
Assert.notNull(entity, "Entity must not be null.");
if (entityInformation.isNew(entity)) {
em.persist(entity);
return entity;
} else {
return em.merge(entity);
}
}
์๋ก์ด ์ํฐํฐ๋ฉด persist, ์๋ก์ด ์ํฐํฐ๊ฐ ์๋ ๊ฒฝ์ฐ mergeํ๋๋ก ๊ตฌํ๋์ด ์๋๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
์ฌ๊ธฐ์ ์ค์ํ ์ ์ ์๋ก์ด ์ํฐํฐ๋ฅผ ๊ตฌ๋ณํ๋ ๋ฐฉ๋ฒ์ธ๋ฐ, ๊ธฐ๋ณธ ์ ๋ต์ ์ด๋ ์ต๋๋ค.
์๋ก์ด ์ํฐํฐ ๊ตฌ๋ณ ๋ฐฉ๋ฒ Default
: ์๋ณ์๊ฐ ๊ฐ์ฒด์ผ ๋ null ์ฌ๋ถ๋ก ํ๋จ(null์ธ ๊ฒฝ์ฐ ์๋ก์ด ์ํฐํฐ), ์๋ณ์๊ฐ ์๋ฐ ๊ธฐ๋ณธ ํ์ ์ผ ๋ ์ซ์ 0 ๊ฐ์ด๋ฉด ์๋ก์ด ์ํฐํฐ๋ก ํ๋จ!
@GeneratedValue ์ฌ์ฉ ์
save()์ ๊ฒฝ์ฐ ํธ์ถ ์์ ์ ์๋ณ์๊ฐ ์์ผ๋ฏ๋ก ์๋ก์ด ์ํฐํฐ๋ก ํ๋จํด์ ์ ์๋์ํ์ง๋ง,
merge()์ ๊ฒฝ์ฐ ์ฐ์ DB๋ฅผ ํธ์ถํด์ ๊ฐ์ ํ์ธํ๊ณ , DB์ ๊ฐ์ด ์์ผ๋ฉด ์๋ก์ด ์ํฐํฐ๋ก ์ธ์งํ๊ธฐ ๋๋ฌธ์ ๋งค์ฐ๋งค์ฐ ๋นํจ์จ์ ์ ๋๋ค. ๋ฐ๋ผ์ Persistable์ ์ง์ ๊ตฌํํด์ ํ๋จ ๋ก์ง์ ๋ณ๊ฒฝํ์ฌ ์๋ก์ด ์ํฐํฐ ํ์ธ ์ฌ๋ถ๋ฅผ DB์ ์ ๊ทผํ์ง ์๊ฒ ๋ณ๊ฒฝํ๋ ๊ฒ์ด ํจ๊ณผ์ ์ ๋๋ค.
โก๏ธ @CreatedDate๋ฅผ ์กฐํฉํด์ @CreatedDate LocalDateTime createdDate์ ๊ฐ์ด ์์ผ๋ฉด ์๋ก์ด ์ํฐํฐ๋ก ํ๋จํ๋๋ก ๋ณ๊ฒฝ
@Entity
@NoArgsConstructor
@EntityListeners(AuditingEntityListener.class) // @CreatedDate ์ฌ์ฉ
public class Item implements Persistable<Long> {
@Id
private Long id;
@CreatedDate
private LocalDateTime createdDate;
public Item(Long id) {
this.id = id;
}
@Override
public Long getId() {
return id;
}
@Override
public boolean isNew() {
return createdDate == null;
}
}
'๐ Backend > Spring Data JPA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JPA] ํ์ด์ง์ ์ฌ์ฉ๋๋ Page์ Slice (0) | 2023.06.23 |
---|---|
[JPA] Spring Data JPA - Web ํ์ฅ ๊ธฐ๋ฅ (0) | 2023.05.22 |
[JPA] Spring Data JPA - ํ์ฅ ๊ธฐ๋ฅ (0) | 2023.05.19 |
[JPA] Spring Data JPA - ์ฟผ๋ฆฌ ๋ฉ์๋ ๊ธฐ๋ฅ (0) | 2023.05.18 |
[JPA] JPQL ๋ฌธ๋ฒ 4 - ๋คํ์ฑ ์ฟผ๋ฆฌ, ์ํฐํฐ ์ง์ ์ฌ์ฉ, Named ์ฟผ๋ฆฌ (0) | 2023.05.10 |
๋ธ๋ก๊ทธ์ ์ ๋ณด
Study Repository
rlaehddnd0422