개발/Java
-
[JPA] 양방향 연관관계개발/Java 2023. 4. 18. 00:58
연관 관계 객체가 아닌 DB 테이블의 경우 FK를 통해서 그 관계를 바로 파악할 수 있다. 하지만 이를 객체 관점에서 본다면 FK가 선언된 자식 엔티티 객체와 부모 엔티티 간의 관계를 함께 표현해야 한다. 이런 관점에서 양방향 연관관계를 아래와 같이 선언할 수 있다. 늘 양방향으로 선언된 관계가 정답일 수는 없지만 양방향으로 선언된 구조가 어떤 형태이고 어떤 문제가 발생할 수 있는지 알아보자. 양방향 연관 관계와 그 주인 // Member.java @ManyToOne @JoinColumn(name = "TEAM_ID") private Team team; // Team.java @OneToMany(mappedBy = "team") private List members = new ArrayList(); 우리..
-
[JPA] PK Mapping개발/Java 2023. 2. 12. 15:39
PK 매핑 @Id 를 통해서 기본키를 매핑한다. 별도의 추가 어노테이션이 없다면 값을 직접 할당해야한다. @GeneratedValue 를 통해서 값을 자동으로 할당해줄 수 있다. 이 어노테이션에서 속성 값으로 strategy 를 설정해줄 수 있다. IDENTITY 전략 GenerationType.IDENTITY 의 경우 DB에 생성을 위임한다. DB INSERT 시점에서 값을 설정한다. 즉, DB에 트랜잭션이 반영된 후에 ID 값을 알 수 있다. 하지만 영속성 컨텍스트에서 이를 관리하기 위해서는 PK 값이 존재해야 한다. 따라서, commit 시점이 아닌 persist 시점에 쿼리를 전달한다. JDBC 내부적으로 INSERT 시점에 반환 값을 확인할 수 있어 SELECT 쿼리가 발생하지는 않는다. CRE..
-
[JPA] Persistence Context개발/Java 2023. 1. 14. 00:47
EntityManager 엔티티 매니저 팩토리는 매 요청마다 엔티티 매니저를 생성한다. 엔티티 매니저는 내부적으로 DB 커넥션을 만들어 DB를 이용한다. 영속성 컨텍스트 영속성 컨텍스트는 논리적인 개념이다. 엔티티를 영구적으로 저장하고 객체로 이용할 수 있게 하는 환경. 이를 이용해서 엔티티를 영속성 컨텍스트에 영속적으로 저장한다. J2SE 환경에서 각 엔티티 매니저는 개별적인 영속성 컨텍스트를 가진다. J2EE, 스프링과 같은 컨테이너 환경에서는 여러 엔티티 매니저가 하나의 영속성 컨텍스트를 가진다. 엔티티의 생명주기 비영속 - new , transient 영속성 컨텍스트와 전혀 관계 없는 새로운 상태 최초 객체를 생성한 상태 값을 set() 하였지만 영속성 컨텍스트에 아직 저장하지 않음. 영속 - m..
-
[JPA] JPA개발/Java 2023. 1. 1. 16:47
JPA는 Java Persistence API의 약자로 Java의 ORM 표준이다. 기존의 JDBC와 Java 앱 사이에서 사용되는 API다. 기존의 RDB, SQL과 객체지향적 코드 사이에는 문제점이 있다. RDB 같은 경우 SQL을 통해 DB에 접근하여 데이터를 관리할 수 있다. 하지만 객체지향적 언어에서 사용되는 상속 관계 등을 명확하게 표현할 수 없다. 또, 참조되는 객체 사이에서는 그 이동이 자유로워야 한다. 하지만 RDB를 통해 가져온 데이터에서는 매번 Join을 통해 새롭게 데이터를 추가해야한다. 이런 상황에서 여러 상황에서 쓰이는 쿼리를 매번 작성하는 것이 번거롭기에 JPA가 등장했다. JPA는 지연 로딩, 즉시 로딩을 지원하며 상황에 따라 필요한 객체를 필요 시점에 맞게 불러올 수 있다...
-
[Spring Boot] Reason: Validation failed for query for method public abstract개발/Java 2022. 6. 9. 21:39
...@EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Invocation of init method failed; nested exception is org.springframework.data.repository.query.QueryCreationException: Could not create query for public abstract...스프링부트에서 JPA를 활용하다 이런 에러를 종종 마주했다.JPA는 함수 명에 따라 쿼리를 동작시켜주는데 종종 직접 작성한 쿼리가 필요할 때가 있다. /* 에러 발생 어노테이션 */@Query("___MY_QUERY__")/* 수정한 어노테..