Tagged

하이버네이트

A collection of 120 posts

하이버네이트

MyBatis는 ORM이 아니다.

구 iBatis, 현재 MyBatis는 ORM(Object Relational Mapping이 아니다. http://en.wikipedia.org/wiki/Object-relational_mapping http://www.mybatis.org/ 이 두개 링크만 봐도 알 수 있지만, MyBatis 홈페이지에도 ORM이라는 말은 전혀 나오지 않는다. 그런데도 일부 MyBatis와 JPA 류를 같은 ORM이 아닌가 혼동하는 분들이 있다. ORM은 간단하게 말해서 Object와 Relataion

Batch patching

[하이버네이트 N+1 Select] Batch Patching으로 해결하기

간단하다. Member -> C 연관 관계 위에다가 @BatchSize라는 애노테이션을 붙여주면 된다. 애노테이션의 값으로는 해당 컬렉션 몇 개를 동시에 읽어올지 설정하면 된다. [java] … @OneToMany(mappedBy = "owner") @BatchSize(size=30) private Set<Item> items; … [/java] 이렇게 설정해 두면 Member를 순회하면서 Item 컬렉션에 접근할 때 개별적으로

fetching strategies

[하이버네이트 성능 튜닝] 패칭 전략

참조: http://www.javadev.org/files/Hibernate%20Performance%20Tuning.pdf 하이버네이트에서 패칭 전략은 애플리케이션에서 어떤 객체와 연관된 객체를 가져오는 방법이다. 즉 A->B 또는 A->Collection 이런 관계가 있을 때 A와 연관되어 있는 B 또는 Collection를 가져오는 방법이다. 쉽게 생각해보면 A를 가져갈때 B나 C도 같이 가져가는 방법이 있고,

하이버네이트

[하이버네이트 VS JPA] 객체 다루기

JPA를 언젠간 써야 할텐데 아직도 하이버네이트가 그냥 편해서… @_@;; 암튼 이 둘은 객체를 다루는 API가조금 다른데 그걸 정리해둡니다.  하이버네이트(Session) JPA(EntityManager) 설명  save() persist()  저장(정확하게는 Pesistent 상태로 변경)   get() find()  DB에서 가져오기   load()  getReference() 프록시 가져오기   delete(

@BatchSize

[하이버네이트] @BatchSize로 쿼리 갯수 대폭 줄이기

참조: – http://docs.jboss.org/hibernate/core/3.3/reference/en/html/performance.html – http://docs.jboss.org/hibernate/stable/annotations/api/org/hibernate/annotations/BatchSize.html 스터디의 회원은 각각 Collection<Study, Integer> 타입의 목록을 가지고 있습니다. 스터디당 참여율이나 신뢰도가 들어있는 콜렉션입니다. 그리고 스터디를 보여줄 때

하이버네이트

[하이버네이트] 컬럼 타입은 어떻게 명시하는게 좋을까?

       @Column(columnDefinition=”TEXT”)        private String descr; 이런 방법이 있습니다. 별로 좋은 방법은 아닙니다. postgresql에서는 괜찮지만, HSQL에서는 저 TEXT라는 SQL 타입이  못해서 해당 테이블을 만들지 못할겁니다. columnDefinition 이 속성 자체가 컬럼 만들 때 사용할 SQL을 입력하는 부분이기 때문에, 각기 다른

봄싹

[봄싹 버그]] JSON 뷰와 하이버가 가져온 Proxy 객체

JSON뷰랑 하이버 Proxy 객체가 만나면 JSON 뷰를 만들다 에러가 납니다. 하이버 객체가 Lazy 로딩을 할 수 없는 지점에서 Proxy 객체를 통해 collection에 접근해서 JSON 뷰로 만들 수 없는 데이터에 접근하여 발생하는 에러로 추측하고 있습니다. 에러가 좀 깔끔하게 떨어지면 해결책이나 원인을 찾기도 쉬울텐데.. 이건 뭐.. StackOverFlow 입니다. Q&A 게시판이

AridPOJOs

[작명 고민] 하이버네이트 get/find류 작명 규약 1

참조: http://blog.xebia.com/2009/04/03/jpa-implementation-patterns-retrieving-entities/ 아시다시피, 하이버네이트에서 영속화 중인 객체를 가져오는 방법은 get()과 load()가 있습니다. 둘 다 가져올 객체 클래스와 id 값을 넘겨주면 원하는 객체를 가져올 수 있습니다. 일단 중요한 차이점 하나는 가져다 달라고 하는 객체가 없을 때 get()은 null을 반환하고 load()는

객체 상태

[하이버네이트] 애매한 에러 메시지 때문에 삽질.. @_@

DEBUG – OpenSessionInViewFilter.doFilterInternal(207) | Closing single Hibernate Session in OpenSessionInViewFilter DEBUG – SessionFactoryUtils.closeSession(784) | Closing Hibernate Session 2009. 8. 7 오후 9:30:52 org.apache.catalina.core.StandardWrapperValve invoke 심각: Servlet.service() for servlet springsprout threw exception org.hibernate.LazyInitializationException: failed to lazily initialize a collection of

버저닝

[하이버네이트]롹킹과 성능 사이에 서다.

하이버네이트에 Optimistic 롹킹을 지원해주는 기능으로 버저닝이 라는게 있습니다. version 필드를 하나 만들어 주면 해당 엔티티에 변화가 일어날 때 마다 version 값을 증가시키는데, flush 하기 직전에 해당 객체의 version이 DB에 있는 version 값과 같은지 확인하는 작업입니다. 버전이 같지 않으면 StaleObjectStateException을 던져줍니다. 하이버네이트의 특징 중 하나로 연관 객체의 id만 알고 있다면, 굳이

enum

하이버네이트, 스프링 MVC에서 enum 사용하기

하이버네이트와 스프링 풀셋으로 구성되어 있는 웹 애플리케이션에서 자바 enum을 사용할 때 생기는 이슈가 뭘까? 1. DB에 어떤 값을 넣을 것이고, 2. 화면에는 어떤 값을 보여주고 어떻게 바인딩 할 것인가? 이 두 가지라고 한다. 그 밖에 이슈 될만한 것은.. 흠.. 뭐.. 없지 않을까 싶다. 왜 이슈일까? 1번 문제를 보자. DB에 잘

하이버네이트

결국 그냥 만들어버린 JPA 문서 자동화 툴

지난 번에 살펴본 hbm2doc로는 사부님이 원하는 문서를 만들기가 버거워서, 예전에 물개선생님이 만드셨다는 코드를 참조해서 비슷하게 만들었습니다. @Entity @Table(name = “users”, uniqueConstraints = @UniqueConstraint(columnNames = { “loginid” })) @SequenceGenerator(name=”user_sq”, sequenceName=”user_sq”) public class User {     @Id     @GeneratedValue(

하이버네이트

[하이버네이트] Session-Per-XXX

참조: JPWH 11장 Session-Per-Operation: 479p. 안티 패턴, 하나의 오펴레이션(메서드) 당 새로운 세션을 만들어 사용하는 것. 성능상 병목지점이 될 수 있다. Session-Per-Request: 479p. pesistence context 범위를 데이터베이스 트랜재션 범위와 동일하게 유지하는 것. 즉 트랜잭션 당 새로운 세션을 만들어 사용하는 것으로 볼 수 있다. 짧은 conversation(하나의 request-response 쌍)을 처리할

스프링

하이버네이트, 스프링, 트랜잭션, OSIV(Open Session In View) 패턴

참조 No Hibernate Session bound to thread 에러로 시작한 OSIV 얘기 http://forum.springframework.org/archive/index.php/t-33082.html 논쟁에서 언급한 HibernateTemplate API http://static.springframework.org/spring/docs/2.5.x/api/org/springframework/orm/hibernate3/HibernateTemplate.html 스프링의 OpenSessionInViewFilter API http://static.springframework.org/spring/docs/2.

스프링

@Repository를 쓴다면 하이버네이트 예외 변환기 직접 만들 필요 없습니다.

스프링이 2.0부터 제공하고 있었는데, 이제서야 알게 됐습니다. 저는 그동안 뭘…;;;; 한 거죠.. ㅋㅋㅋ 이 것 참..;; 혹시 저만 빼고 다들 알고 계셨던건 아니겠죠? 저는 게다가 항상 @Repository 애노테이션을 쓰고 있었거든요. 그런데도 몰랐습니다. @Repository 애노테이션 API에도 안 나와있네요. 하이버네이트 예외 변환기가 언제 필요하냐면.1. 하이버네이트 DAO 구현을 스프링 API에서