분류 전체보기
-
<Spring JPA> 1.14 양방향 연관관계와 연관관계의 주인1JPA 2020. 4. 23. 09:35
앞서 단방향 연관관계를 지정해주면서 외래키를 통해 지정해주는 방법을 보았다. 우리가 두 개의 테이블을 조인할 때 인지하는 방법과 비슷하다. 연관되어 있는 외래키를 가지고 연관을 지어서 조회하는 방식을 사용해왔다. 헌데 다시 생각해보면, 우리는 테이블을 조인해서 조회할때 단방향, 양방향이라는 걸 생각해왔던가? 그런 생각은 해오지 않았다. 그럼 갑자기 왜 단방향, 양방향을 이야기하고 있는 것일까? 위 그림을 보면 우리가 사용하던 테이블의 연관관계는 단방향, 양방향의 개념이 없는 것을 알 수 있다. 그냥 1:1 이냐 1:n n:1 이냐 정도의 개념이다. 하지만 객체 간의 관계에서는 단방향과 양방향이 존재한다. 양방향 매핑을 하면서 주의할 점은 n:1 중, n 인 부분에 연관관계의 주인을 설정해야 한다는 것이다..
-
<Spring JPA> 1.13 단방향 연관관계JPA 2020. 4. 22. 09:50
연관 관계 매핑 시에는 객체와 테이블 간의 연관관계 차이를 이해하고 매핑해야 한다. 테이블에서는 외래키를 사용하여 매핑하고 JPA 에서는 객체의 참조를 통해 매핑하게 때문에 그 차이를 명확히 이해해야 한다. 객체 연관 관계 매핑만 본다면 방향(양방향, 단방향), 다중성(1:n), 연관관계의 주인 (mapped by) 이 세가지를 이해하고 매핑해야 한다. 연관관계가 왜 필요하냐고 궁금증이 생길 수도 있다. 사실 간단한다. JPA 를 쓰는 것부터 테이블에 있는 데이터를 객체지향적으로 이용하기 위해서 쓴다면, 객체지향적으로 쓰려면 당연히 entity 간의 참조가 되어야 객체지향 언어를 쓰는데 한계가 없지 않을까 싶다. 만약 회원/팀 간의 단방향 연관관계를 매핑한다고 생각해보자. 지금은 회원에서의 관점만 생각해..
-
<Spring JPA> 1.12 요구사항 분석과 기본매핑JPA 2020. 4. 21. 09:56
요구사항 분석에서는 그다지 쓸게 없다. 데이터 베이스 형태에 따라 entity 를 구성하였고, 그렇게 entity 를 구성하다보니 JPA 의 장점을 활용할 수 없다는 것을 확인하였다. 예를 들어, 외래키 관계의 값을 가져왔을 때 그 키만이 아닌 연관된 컬럼 전체를 가져오지 못한다. 이건 객체지향적이지 못하다 라고 설명하고 있는데... 이게 왜 객체지향적이 아닌지는 잘 모르겠다. 이게 된다고 객체지향인가..싶기도 하지만 어쨌든! 편리하게 객체를 가져올 수 있다는 점에서 객체지향적이라고 표현한 듯 하다.
-
<Spring JPA> 1.11 기본키 매핑JPA 2020. 4. 21. 09:52
기본키를 매핑하는 방법으로 두가지 어노테이션을 언급할 수 있다. @Id, @GeneratedValue 기본키로 지정하겠다는 표시는 @Id 로 충분하다. 다만 우리가 보통 키를 직접 넣어주기 보다는 자동증가하는 형태로 만들기 때문에 거의 대부분 @GeneratedValue 를 함께 하게 된다. @Id 는 다른 방법이 없다. 그냥 달아주면 된다. 다른 설정도 없다. @GeneratedValue 는 몇가지 설정이 있다. 따로 설정해주지 않는다면 AUTO 로 된다. AUTO 라고 해서 아 자동이구나 하고 넘어가면 안된다. 뭘 기준으로 자동으로 되는 지 알아야 한다. JPA 에서 @GeneratedValue 의 AUTO 는 데이터베이스의 방언에 따라 자동지정된다. AUTO 외에는 IDENTITY, SEQUENCE..
-
<Spring JPA> 1.10 필드와 컬럼매핑JPA 2020. 4. 18. 19:10
컬럼을 매핑하는 어노테이션은 다음과 같은 것들이 있다. @Column 이 필드가 이 컬럼이다 라고 알려준다. name 값을 통해서 이름을 지정해주고, insertable, updatable 을 통해 해당 엔티티값이 변경되거나 등록되는 경우 등록 변경을 할지 지정할 수 있다. nullable 도 설정하고, unuque 값도 지정할 수 있다. 하지만 필드에 @Column 을 통해 설정하면 유니크키값이름 지정이 안되므로 추천하지 않는다. 그리고 length 도 지정이 가능하다. @Enumerated 는 자바의 enum 을 매핑할 때 사용한다. 크게 ORDINAL 와 STRING 설정이 있는데, 무조건 STRING 을 사용한다고 보면 된다. ORDINAL 을 사용하는 경우 enum 의 순서값을 저장하는데, 음...
-
<Spring JPA> 1.9 데이터베이스 스키마 자동 생성JPA 2020. 4. 18. 19:02
JPA 는 데이터베이스는 애플리케이션 실행 시점에 자동생성해준다. 이렇게만 쓰면 무조건 생성해주는 것 같지만 그건 아니다. 설정이 되어 있는 경우에만 가능하다. JPA 는 Entity 에 설정해놓은 그대로, 설정값에 지정해놓은 데이터베이스 방언대로 테이블 생성쿼리를 날려준다. 이 방법은 개발 시에는 굉장히 유용하나, 운영 서버에 적용해놓았다가 데이터가 전부 날라가는 낭패를 볼 수도 있으니 개발 환경에서만 사용하는 것을 권장한다. 설정값에 지정해놓는 값은 hibernate.hbm2ddl.auto 를 사용한다. 여기에 create, create-drop, update, validate, none 을 설정할 수 있다. 이름만 봐도 느낌이 온다. create 는 생성이다. 무조건 생성이라서 원래 있던 것도 다 ..
-
<Spring JPA> 1.8 객체와 테이블 매핑JPA 2020. 4. 14. 09:53
엔티티를 매핑하는 순서에는 몇가지가 있다. 첫번째로 해줘야 하는 것이 @Entity 와 @Table 을 써주는 것이다. 당연하지 이걸 말이라고 하는거야? 라고 할 수 있지만 그렇다. ㅎㅎ @Entity 가 붙은 클래스는 JPA 가 관리한다. 따라서 JPA 와 관련해서 사용할 클래스는 엔티티를 꼭 붙여준다. 조건은 기본 생성자를 꼭 붙여준다. 그 생성자는 public 또는 protected 여야만 한다. 그리고 final, enum, interface, inner 클래스는 안된다. 뭔가 딱 봐도 안될 것 같다. 관리하려면 기본적인 클래스 여야한다 정도로 받아들이자. 그리고 모든 저장 필드에 final 을 사용하지 말자. @Entity 에는 name 을 지정할 수 있다. 가급적 기본값으로 냅두고 클래스 이름..