본문 바로가기

Spring/Spring Data JPA

(9)
Transaction 정책 및 Hibernate/jpa bulk save 데이터를 한번에 여러 데이터를 저장할때 , bulk save로 검색하면 여러 샘플이 나오는데10만건(특정)의 데이터를 50(특정)건수 만큼씩 끊어서 Transaction을 적용하고 저장하고 싶을때 참고하면 좋을거 같다. Spring 에서 Transaction을 사용하기 위해서는 몇가지 주의할점이 있다. 1. class 나 inferface 에선언하여 사용한다.2. 자기 참조는 불가능 하다. (클레스를 분리하여 외부 호출로 사용 ) - AOP proxy 방식때문이다.3. private method 에서는 동작되지 않음... 자기 참조로 호출이 불가능 하기때문에 약간의 꼼수라고 해야 할까요 ? 내부 무명 클레스를 이요하거나, DL 방식으로 Class를 불러와서 사용하면 가능 하다. 예제는 DL 방식으로 불러..
JPA Hibernate Bulk Save , Multi save 일괄 처리 JDBC 일괄 처리JDBC는 단일 PreparedStatement로 표현할 수있는 SQL 문을 함께 일괄 처리 할 수 ​​있도록 지원합니다. 구현 방식은 일반적으로 드라이버가 데이터베이스에 대한 네트워크 호출을 절약 할 수있는 한 번의 호출로 서버에 일괄 작업을 보냅니다. Hibernate는 JDBC 배치를 활용할 수 있습니다. 다음 설정은이 동작을 제어합니다. hibernate.jdbc.batch_size드라이버에게 배치를 실행하기 전에 Hibernate가 함께 배치 할 문장의 최대 수를 제어한다. 0 또는 음수는이 기능을 비활성화합니다. hibernate.jdbc.batch_versioned_data일부 JDBC 드라이버는 일괄 처리가 실행될 때 잘못된 행 수를 반환합니다. JDBC 드라이..
JPA Hibernate Multi PK 주의점 (정적 내부 클레스) Hibernate 사용시 주의점 Hibernate: No default constructor for entity Inner Classhttps://stackoverflow.com/questions/28053135/hibernate-no-default-constructor-for-entity-inner-class 내부 클래스 이용시 하이버네이트 내부에서 프록시(리플레케이션)으로 기본 생성자를 콜 한다. 이때 내부 클레스를 사용 하게 되면 실제로 내부클레스는 디폴트 생성자가 없기때문에 에러가 나가 된다. 이에 문제를 해결하기 위해서는 정적 내부 클레스를 이용한다. 해결 방안 : 정적 내부클레스 이용 @Embeddablepublic class ClassName { @EmbeddeId public static ..
@OneToOne 양방향 매핑 주키(PK)공유 @OneToOne 양방향 매핑 주키(PK)공유 두테이블에서 같은 키를 PK로 이용한다. A -> PK -> B -> FK,PK *부모객체메인객체 @OneToOne 선언영속상태 정의부모객체에 양방향 매핑의 mappedBy를 설정하여 외례키 컬럼이 생성되지 않도록 한다. @Entity@JsonIgnoreProperties(ignoreUnknown = true)public class Users implements Serializable { @Id private String email; @OneToOne(mappedBy = "users" , cascade = { CascadeType.PERSIST ,CascadeType.MERGE , CascadeType.REMOVE // 사용자 삭제시 FCM Key 함께 삭제..
ORM Jpa @ResponseBody 재귀 memory error ORM을 이용하다보면 @ResponseBody 에서 자동으로 마샬링 언마샬링시에 무한 재귀에 빠지게 된다.이때 부모자식과 같은 관계를 갖는 객체는 원하는 형태에 따라 다음과 같은 @Annotation을 붙여 주어야 한다. @JsonBackReference 는 순환참조의 역할을 끝어주게 되며, 해당 객체가 마샬릴될때 대상에서 제외 된다. 즉 양방향의 JSON 마샬링을 할 수 없는 단점 존재한다. 양방양이 가능한 @JsonIdentityInfo(http://springquay.blogspot.kr/2016/01/new-approach-to-solve-json-recursive.html) 있지만 같은 객체에대한 마샬링은 해주지 않고 참조만 하고 있어, 언마샬링구조엔 맞지 않고 다시 호출해주어야 한다. * 부모..
JPA forin key 생성 referencedColumnName="Target Table 의 column Name 실제 java 객체의 attribute name" @JoinColumn (name="concertOrderId", referencedColumnName="concertOrderId" )
Spring JPA QueryMethod(findBy...deleteBy) QueryMethod (Repository 사용자 변형)https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.query-methods PK값이 두개일때 FK가 걸려있는 컬럼을 이용해서 모두 지우려 할경우 JPA 에서는 데이터를 조회 한후 삭제 하기 때문에삭제할 데이터가 없다는 오류메세지를 주고, 익셉션이 발생한다,이때 사용자 변형 쿼리를 이용해서 사용하면 해결 가능하다. findByUserId(fieldName)deleteByUserIdAnd{fieldName} @Eembedable 로 Muilti PK 사용시 PK값을 두개를 사용하기 때문에 @Embededable , Id 를 이용하는데 이때는 {PKClass}_..
Spring JPA Hibernate Embeddable(PK composite) http://www.javabeat.net/embeddable-embedded-embeddedid-jpa-annotations/http://uaihebert.com/tutorial-jpa-composite-primary-key/http://ldg.pe.kr/framework_reference/hibernate_annotations/ver3.1beta3/html/entity.html * Criteria 예시 블로그http://antop.tistory.com/30 @Entity @Getter @Setter @Table(name = "campaign") @ToString( exclude = "mediaManagementEntity") public class CampaignEntity implements Ser..