반응형

Spring/JPA 16

태태코딩 - 영속성 컨텍스트

영속성 컨텍스트간단하게 요약해서 작성하자면. 가장 잘 정리된 사진인거같아서 퍼온다.   보통 JPA를 사용하면 EntityManger에 대해서 모르고 자동으로 사용하는 사람들이 많다.하지만 EntityManger를 알아야 JPA를 더 효율적으로 사용할 수 있다.  위의 흐름을 보면  JPA를 사용하면서 java.class로 Entity를 만들고 Entity Manager Factory를 통해 Entity Manager 생성 EntityManger를 통해서 Entity를 관리 Persistance Context에서 관리 Persistence Unit은 DB연결에 대한 설정으로 .XML로 사용해야 했지만, 요즘은 .프로퍼티(.property), .야믈(yaml) 파일에 datasource, user, pas..

Spring/JPA 2024.12.21

태태개발일지 - 비동기처리

동기작업이 순차적으로 실행된다. 하나의 작업이 끝나야 다음 작업을 진행할 수 있다. public void syncExample() { System.out.println("파일 다운로드 시작"); downloadFile(); // 파일 다운로드가 끝날 때까지 대기 System.out.println("파일 다운로드 완료");}public void downloadFile() { try { Thread.sleep(3000); // 3초 동안 대기 (파일 다운로드 시뮬레이션) } catch (InterruptedException e) { e.printStackTrace(); }} 파일 다운로드가 끝날 때 까지 기다렸다가 아래의 다운로드 완료를 찍는다. 비동..

Spring/JPA 2024.12.11

태태개발일지 - 트랜잭션?

트랜잭션 jpa를 공부하다 보니"한  클래스안에서 @trancational이 걸려있는 메서드를  @trancational이 걸려있는 메서드 내에서 사용하면 트랜잭션 적용이 안된다" 라는 사실을 알 게 되었다. 그이유는 다음과 같다. Spring에서 트랜잭션은 기본적으로 AOP를 사용해 구현됩니다.이 AOP는 프록시 객체를 생성하여 트랜잭션 관리를 처리합니다. 하지만 클래스 내에서 자기 자신(this)의 메서드를 호출하면 프록시가 아닌 실제 객체의 메서드를 호출하기 때문에 트랜잭션이 적용되지 않을 수 있습니다. @Servicepublic class MyService { @Transactional public void methodA() { // 트랜잭션 시작 Sys..

Spring/JPA 2024.12.03

태태개발일지 - JPA PK Key

JPA KEY 생성 전략 1. AUTO (기본값)JPA가 사용하는 데이터베이스 방언에 따라 키 생성 방식을 자동으로 선택합니다.주로 SEQUENCE(PostgreSQL, Oracle) 또는 IDENTITY(MySQL, MariaDB)를 사용.@Id@GeneratedValue(strategy = GenerationType.AUTO)private Long id;2. IDENTITY데이터베이스가 자동으로 ID를 생성합니다.매번 insert가 즉시 실행되며 쓰기 지연이나 batch insert는 불가능.@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id; 3. SEQUENCE데이터베이스의 시퀀스 객체를 사용하여 ID를 생성합니다.JPA가 ..

Spring/JPA 2024.12.03

태태개발일지 - 양방향 연관관계

양방향 연관관계 앞서 OneToMany , ManyToOne, OneToOne, ManyToMany 관계를 알아보았다. 양방향 연관관계는 ManyToMany를 말하는 것이 아니다. OneToMany 와 ManyToOne 으로 서로 연관관계를 맺었을 때에 대한 이야기이다. -- sudo code --public class One{ private Long id; @ManyToOne @JoinColumn(name = "TWO") private Two two;} -- sudo code --public class Two{ private Long id; @OneToMany(mappedby= "two") private List ones;}  아래와 같이 서로 양방향으로 연관..

Spring/JPA 2024.11.22

태태개발일지 - JPA 슈퍼타입

슈퍼타입 서브타입 논리모델 객체는 상속을 지원하므로 모델링과 구현이 똑같지만, DB는 상속을 지원하지 않아서, 논리 모델을 물리 모델로 구현할 방법이 필요. DB의 슈퍼타입 서브타입 논리모델을 실제 물리 모델로 구현하는 방법은1. join2. singleTable3. tablePerClass 들어가야하는 어너테이션 종류 JPA가 이 세가지 방식과 매핑하려면@Inheritance(strategy=InheritanceType.XXX).default 전략은 SINGLE_TABLEInheritanceType 종류JOINEDSINGLE_TABLETABLE_PER_CLASS@DiscriminatorColumn(name="DTYPE")부모 클래스에 선언한다. 하위 클래스를 구분하는 용도의 컬럼이다. 관례는 defau..

Spring/JPA 2024.11.20

태태개발일지 - ActionQueue

ActionQueue 커리어리에서 개발 관련 글을 읽다가 JPA가 flush 할 때 개발자가 의도한 비지니스 로직 대로, 실행되지 않는다는 글을 읽게 되었다. 그래서 실제로 간단한 Entity하나를 만들어서 테스트해봤다.테스트 한 내용은 이렇게된다. 예상 로직 : insert -> select -> insert -> delete -> insert실제로직 : insert -> insert -> insert  -> delete 하지만 test하니까 정말로 중복키 에러가 뜨는 것이였다. 그래서 ActionQueue에 대해서 찾아봤다. ActionQueue의 주요 역할엔티티 상태 추적:JPA에서는 엔티티 객체를 관리하는데, ActionQueue는 엔티티 객체가 변경될 때마다 그 변경 사항을 추적합니다. 예를 들..

Spring/JPA 2024.11.18

태태개발일지 - ManyToMany

ManyToMany * 실무에서 ManyToMany 관계를 사용하는 경우는 거의없다. * => 아래 이유를 설명하겠다. 일단 N:N관계에 ManyToMany 어너테이션을 사용하게된다.사실 상 DB에서 N:N 관계에 정규화된 테이블에 연관을 맺게되려면, 무조건 가운데 테이블을 하나 생성하고 만들게된다.ex) 그렇다면 JPA 에서 ManyToMany는 무엇인가?ManyToMany를 선언하게 된다면, 그냥 저 가운데 테이블이 메핑이 되는 것이다. ex)public member{ @Id private Long id; @ManyToMany @JoinColumn(name = "MEMBER_ID") private List teams; } public Team{ @Id ..

Spring/JPA 2024.11.15

태태개발일지 - OneToOne

OneToOne DB에서 1대 1관계라고 생각하면 된다. *JPA에서는 OneToOne 어너테이션을 사용하면 되고, 외래키가 있는 곳을 연관관계의 주인으로 설정하면 된다.*public class Member(){ @Id private Long id; @OneToMany @JoinColumn(name = "STAM_ID") private STAMP stamp;}  public class Stamp(){ @Id private Long id; @OneToMany(mappedBy="stamp") private Member member;}  OneToOne 은 엔티티를 가져올때 LAZY로 처리해도 무조건 즉시 로딩이된다.그 이유는 값이 있는 지 확..

Spring/JPA 2024.11.15

태태개발일지 - JPA 연관관계

OneToMany JPA강의를 듣다 보니 ManyToOne을 반대쪽으로 설정하면 OneToMany다라고 생각했는데 One인 곳이 연관관계의 주인이 되는 OneToMany가 있다는 것을 인지한 후 글로 정리한다. @Entitypublic class Member{ @ID private Long id } @Entitypublic class Team{ @Id private Long id; } 다음과 같이 엔티티를 보았을 때 Member와 Team은 N:1 관계이다.DB에는 Member에 Team의 외래키가 들어있는 상황. Member를 연관관계의 주인으로 보았을 땐 Member에 JoinColum을 두고 관계를 맺으면 깔끔하다.근데 Member에서는 Team에 대한 데이터를 다루고 싶지 않을 때 우..

Spring/JPA 2024.11.14
반응형