본문 바로가기
728x90
반응형

자바51

[Java/개념] equals() 와 hashCode() equals() 와 hashCode() 는 객체의 동등비교와 해시코드 값을 얻는데 사용한다. JavaDocs 공식문서에 따르면 다음과 같이 나온다. https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#hashCode() Object (Java SE 17 & JDK 17) java.lang.Object public class Object Class Object is the root of the class hierarchy. Every class has Object as a superclass. All objects, including arrays, implement the methods of this class.. 2024. 1. 19.
[JPA/Java] JPQL 벌크 연산 재고가 10개 미만인 모든 상품의 가격을 10% 올리려면 어떻게 해야할까? JPA 변경 감지 기능으로 실행하려면 너무 많은 SQL이 실행되어야 한다. (1) 재고가 10개 미만인 상품을 리스트로 조회한다. (2) 상품 엔티티의 가격을 10% 증가한다 (3) 트랜잭션 커밋 시점에 변경감지가 동작한다. 변경된 데이터가 100건이라면 100번의 UPDATE SQL이 실행될 것이다. 벌크 연산은 쿼리 한 번으로 여러 테이블 로우를 변경한다(엔티티) executeUpdate()의 결과는 영향받은 엔티티의 수를 반환하는데, UPDATE, DELETE 쿼리를 지원한다 INSERT(insert into .. select, 하이버네이트 지원) String qlString = "update Product p " + "se.. 2023. 5. 11.
[JPA/Java] JPQL Named 쿼리 - 어노테이션, XML Named 쿼리는 정적 쿼리이다. 미리 정의해서 이름을 부여해두고 사용하는 JPQL이다. 주로 어노테이션이나 XML에 정의해두고 애플리케이션 로딩 시점에 초기화 후 재사용한다. 애플리케이션 로딩 시점에 쿼리를 검증한다. (1) 어노테이션에서 사용하는 방법 Member.java package jpql; import javax.persistence.*; @Entity @NamedQuery( name = "Member.findByUsername", query = "select m from Member m where m.username = :username" ) public class Member { @Id @GeneratedValue private Long id; public MemberType getType.. 2023. 5. 11.
[JPA/Java] JPQL 엔티티 직접 사용 JPQL에서 엔티티를 직접 사용하면 SQL에서 해당 엔티티의 기본 키 값을 사용한다. [JPQL] jpql = "SELECT count(m.id) FROM Member m"; // 엔티티의 아이디를 사용 jpql = "SELECT count(m) FROM Member m"; // 엔티티를 직접 사용 [SQL] (위의 JPQL 둘다 같은 SQL을 실행) SELECT count(m.id) as cnt FROM Member m 엔티티를 파라미터로 전달 시 String jpql = "select m from Member m where m = :member"; List resultList = em.createQuery(jpql) .setParameter("member", member) .getResultList(.. 2023. 5. 11.
[JPA/Java] JPQL 다형성 쿼리 - TYPE, TREAT 다형성 쿼리로는 TYPE, TREAT이 있다. TYPE 예시 예시) Item 중에 Book, Movie를 조회하라 [JPQL] jpql = "SELECT i FROM Item i WHERE type(i) IN (Book, Movie)"; [SQL] SELECT i FROM i WHERE i.DTYPE in (‘B’, ‘M’) TREAT(JPA 2.1) TREAT은 자바의 타입 캐스팅과 유사하다. 상속 구조에서 부모 타입을 특정 자식 타입으로 다룰 때 사용한다. FROM, WHERE, SELECT(하이버네이트 지원) 에서 사용할 수 있다. 예시) 부모인 Item과 자식 Book이 있다. [JPQL] jpql = "SELECT i FROM Item i WHERE treat(i as Book).author =.. 2023. 5. 11.
[JPA/Java] JPQL 패치 조인의 한계 - 글로벌 배치 패치 사이즈, @BatchSize JPQL 패치 조인의 한계 ① 패치 조인 대상에는 별칭을 줄 수 없다. - 하이버네이트는 가능하나, 가급적 사용하지 않는다. jpql = "select t from Team t join fetch t.members m"; // 패치 조인 대상에는 Alias를 주면 안된다. 패치 조인은 연관관계를 다 끌고 오는 건데, 별칭을 줘서 데이터를 누락시켜서 가져오는 가능성도 있다. 패치 조인에서 별칭을 쓰지 않아야 하는 이유는 → 데이터의 정합성이나 객체 사상이 안맞을 가능성이 높기 때문에 쓴다면 다대일 관계로 만들고 쓰는게 좋다. jpql = "select m from Member m join fetch m.team"; ② 둘 이상의 컬렉션은 패치 조인을 사용할 수 없다. → 데이터 정합성 문제 때문에 (일대다.. 2023. 5. 11.
728x90
반응형