[MSSQL] 테이블을 참조하는 FOREIGN KEY 제약 조건을 찾기
2023. 9. 6. 15:38
데이터베이스/mssql
SELECT f.name, OBJECT_NAME(f.parent_object_id) TableName, COL_NAME(fc.parent_object_id,fc.parent_column_id) ColName FROM sys.foreign_keys AS f INNER JOIN sys.foreign_key_columns AS fc ON f.OBJECT_ID = fc.constraint_object_id INNER JOIN sys.tables t ON t.OBJECT_ID = fc.referenced_object_id WHERE OBJECT_NAME (f.referenced_object_id) = '참조테이블명'
[JPA] 변경 감지와 병합(Merge)
2023. 4. 22. 22:27
데이터베이스/JPA
준영속 엔티티를 수정하는 2가지 방법 ⭐️준영속 엔티티란? JPA에서 영속성 컨텍스트에서 분리된 엔티티 즉, 영속성 컨텍스트가 더는 관리하지 않는 엔티티를 말한다. 영속성 컨텍스트는 JPA가 엔티티를 관리하는 곳으로, 영속 상태(Persistent)인 엔티티는 영속성 컨텍스트에 저장되어 관리된다. 영속 상태인 엔티티가 영속성 컨텍스트에서 분리되면 준영속 상태(Detached)가 된다. 준영속 상태의 엔티티는 더 이상 영속성 컨텍스트에서 관리되지 않으며, 영속성 컨텍스트에서 분리된 이후에는 엔티티를 수정하더라도 JPA는 이를 인식하지 못한다. 준영속 엔티티를 수정하는 방법은 변경 감지 및 병합 사용하는 방법이 있다. 변경 감지 영속성 컨텍스트에서 엔티티를 다시 조회한 후에 데이터를 수정하는 방법으로 트랜잭..
[SQL] JOIN(결합)에 대해서(with.옵티마이저 및 결합 알고리즘)
2023. 2. 20. 13:42
데이터베이스/SQL
fk값이 무조건 있는 경우에는 left join 보다는 inner join을 사용하는 습관을 길러야 한다고 한다고 말씀하셨다. 그 이유를 찾고 공부한 내용을 정리하기 위해 작성한다. Join(결합)이란? 조인이란 두 개 이상의 테이블을 서로 묶어 하나의 결과 집합을 만들어 내는 것을 말한다. 즉, 데이터베이스에 있는 두 개 이상의 테이블의 데이터를 결합할 수 있는 SQL의 필수 기능이고 조인 작업을 사용하면 테이블이 서로 어떻게 관련되어 있는지 지정하여 여러 테이블에서 데이터를 검색할 수 있다. 이 글에서 다룰 결합이다. 내부 조인 (INNER JOIN)| 외부 조인 (OUTER JOIN) 왼쪽 (LEFT OUTER) 오른쪽 (RIGHT OUTER) 내부 조인 (INNER JOIN) 두 테이블에 일치하는..
[SQL] CROSS JOIN 이란? 그리고 JPA에서 주의할 점
2023. 2. 18. 21:53
데이터베이스/SQL
1. CROSS JOIN 이란? 크로스 조인은 모든 경우의 수를 전부 표현해주는 방식이다. 기준 테이블이 A일 경우 A의 데이터 한 ROW를 B테이블 전체와 JOIN 하는 방식이며, 결과가 N * M 이 된다. A테이블에 데이터가 3개, B테이블에는 데이터가 4개가 있으므로 총 12개가 검색된다. CROSS JOIN은 대개 테스트로 사용할 대용량의 테이블을 생성할 경우에 사용된다고 한다. 예를 들어, 각 5 만건과 7 만건의 테이블을 CROSS JOIN 하면 35억건의 데이터를 생성시킬 수 있다. 이 경우 두 테이블 컬럼들의 총 크기와 생성될 총 행수에 따라, 시스템이 다운되거나 디스크 용량이 꽉 차 버릴 수도 있으니 주의가 필요하다. 2. JPA에서 주의할 점 팀장님께서 말씀하신게 바로 이 부분인데, ..
[SQL] 정규화란?
2023. 2. 5. 19:03
데이터베이스/SQL
어느날 팀장님께서 이렇게 물었다 정규화가 뭔지 아세요? 머쓱하게 잘 모른다고 말씀드렸다. 다음에 같은 걸 물어보시면 대답해드리기 위해 공부한다. SQL 정규화란? 정규화는 1NF ~ 6NF 그리고 BCNF 가 있다. 하지만 보통, 3NF 정규화까지만 해도 충분하다고한다. 설명 데이터를 중복으로 저장하면 일관되지 않은 데이터, 비정상적인 삽입 갱신 삭제 처리, 디스크 공간 낭비 등 많은 문제를 일으킨다. 정규화는 중복 데이터를 저장하면서 일으키는 문제점을 없애려고 정보를 주제별로 분할하는 프로그램을 의미한다. 즉, 정규화란 데이터가 꼬이는 것을 막기위해 테이블을 잘게 나누는 것 행위다. 기본 목표 테이블 간에 중복된 데이터를 허용하지 않는다는 것, 중복된 데이터를 허용하지 않음으로써 무결성(Integrit..
[JPA]@Formula
2023. 2. 5. 16:20
데이터베이스/JPA
Hiberante에서 제공하는 @Formula 어노테이션을 사용하면 가상 컬럼을 만들수 있다고 한다. 가상컬럼이라는 것은 JPA 상에는 존재하지만 DB에는 생성되지 않는 칼럼을 말한다. 주의해야 할 점은 하이버네이트 문서에도 언급되어 있지만 네이티브 SQL을 사용한다는 것이다. 때문에 RDBMS의 종류를 교체하는 경우 호환성에 문제 가 있을 수도 있다. 언제 사용하는가? 예제들을 보면 댓글 개수구하기, 좋아요 개수구하기, 글자수 구하기등 무언가를 카운팅할 때 주로 사용하는 것으로 보인다. 사용법 사용법은 매우 간단하다 Entity 필드에 @Formula(쿼리)를 달아주면 된다. //댓글 개수 @Formula("(SELECT count(1) FROM reply r WHERE r.boardId = id)")..
[JPA] Entity Lifecycle Events
2022. 12. 31. 11:53
데이터베이스/JPA
@PrePersist 선언된 것이 뭔지도 모르고 @PrePersist가 선언된 메소드를 실행 후 Repository.save(객체) 를 해버린 부끄러움을 잊지 않기위해.....ㅎㅎ Entity Event?? https://www.baeldung.com/jpa-entity-lifecycle-events 문서에 보면 아래와 같이 적혀있다. JPA는 다음과 같은 7개의 선택적 수명 주기 이벤트를 지정합니다. - 새로운 엔티티에 대해 persist가 호출되기 전에 – @PrePersist - 새로운 엔티티에 대해 persist가 호출된 후 – @PostPersist - 엔티티가 제거되기 전 – @PreRemove - 엔티티가 삭제된 후 – @PostRemove - 업데이트 작업 전 – @PreUpdate - 엔..
[JPA] JPQL @Query에 각 DB function() 사용해보기
2022. 12. 31. 11:19
데이터베이스/JPA
JPQL에서 기본적으로 지원하는 function만으로는 비지니스의 조회를 해결하기는 한계가 존재한다. nativeQuery를 사용하여 fetch까지 할 수 있는 방법을 찾다가 function() 을 찾게되었다. function을 쓰게 된 이유 AccountUser의 엔티티는 회원을 생일을 LocalDate로 저장되어 있다. @Getter @Setter @Entity public class AccountUser { @Id private Long id; @NotNull private LocalDate birth; } 회원 목록 조회시 생년월일 중 월만 맏아서 조회를 하게 되는 기획이 있다. MSSQL을 사용하고있어서 SUBSTRING(CONVERT(VARCHAR(8), birth, 112), 5, 2)) C..