hibernate

A collection of 27 posts

hibernate

하이버네이트 VS iBatis 성능 비교: 이번에는 select

결과는 비슷하다. 차이 없다. 어제는 insert 성능 비교했었는데, 단일 insert 문이야 얼마나 차이가 나겠냐. 고작 3~4 밀리세컨 가지고 성능을 논하기는 뭐할 것 같아서, 1000건~5000건을 한꺼번에 insert 시키는 시간을 측정해 봤더니, 이건 뭐 하이버네이트가 한 5~6배는 빠르게 나왔었다. 코드까지 열어봐도 잘 모르겠지만,

hibernate

OSIV 패턴 사용시 SQL 누수 현상에 대한 대처 방안

OSIV 패턴을 안티 패턴으로 보는 시각도 있다. 이해한다. OSIV 필터나 인터셉터를 사용하면 개발할 때 편하지만, 뷰 랜더링 시점에 예측하지 못한 쿼리가 발생해서 시스템 성능에 영향을 줄 수 있다. 그래서 확인해봐야 하는데.. 문제는 테스트할 때 OSIV 필터 적용으로 발생하는 추가적인 SQL까지 잡아낼 수 있느냐가 관건이다.

API 설계

Principle of least astonishment

참조: http://en.wikipedia.org/wiki/Principle_of_least_astonishment astonishment라는 생소한 단어 때문에 뜻을 가늠하기가 어렵습니다. astonishment는 경악, 놀람이라는 뜻으로, “최대한 놀래키지 말라는 원칙”입니다.  위키피디아의 정의를 인용하면 다음과 같습니다. In user interface design, programming language design, and ergonomics, the principle

hibernate

OSGi에서 SessionFactory(Hibenate) 사용하기

참조 : http://www.osgi.org/blog/2007/06/osgi-and-hibernate.htmlhttp://notehive.com/wp/2008/07/23/osgi-hibernate-spring-dm-sample/ 번들 세 개만 살펴보겠습니다. 1. hibernate-class2. hibernate-session3. model-a1. hibernate-class 이 녀석은 하이버네이트 라이브러리를 묶어놓은 번들입니다. 얘가 담고 있는 라이브러리는 다음과 같습니다.이렇게 묶어놓은거 말고 스프링 번들 저장소에서

HANS

OSGi에서 Hibernate의 SessionFactory 문제

대체 어떻게 해야 할까? 뭘? @Entity 달려있는 클래스들이 여러 번들들에 분포되어 있고, 애플리케이션이 돌아가는 도중에 번들이 추가되고, 없어지고, 다시 설치되고, 업데이트 되는 와중에 SessionFactory는 그에 따라 계속 바껴야합니다. Spring이 제공하는 AnnotationSessionFactoryBean 클래스로 만드는 SessionFactory는 정적입니다. 한 번 만들고 다른 빈들이 주입받아서 사용하는데, 도통 어떻게

hibernate

Table per connrete class with implicit polymorphism

특징 모든 구현 클래스 하나 당 하나의 테이블로 표현한다. 상속 받은 속성들도 테이블의 컬럼으로 맵핑한다. 문제점 다형적인 관계를 잘 지원하지 못해. 왜? 상위 클래스와 관계를 맺고 있는 클래스가 하위 클래스를 참조해야 한다면, 이 클래스가 가져야 할 하위 클래스의 외례키는 두 개의 하위 클래스 모두의

hibernate

12.2.8. Transaction management strategies

TransactionTemplate 나 TransactionInterceptor 를 사용하든 둘 다 PlatformTransactionManager 객체를 사용하고 있습니다. Hibernate를 위해 사용할 수 있는 TransactionManager로는 두 개가 있습니다. 1. HibernateTransactionManager :: for a single Hibernate SessionFactory, using a ThreadLocal  Session under the hood2. JtaTransactionManager :: delegating to the JTA subsystem of the container물론

hibernate

12.2.7. Declarative transaction demarcation

이번엔 선언적인 트랜잭션 경계 설정에 관해 살펴보겠습니다. Spring AOP를 사용하는 방법으로 이전에는 Service Layer에 트랜잭션과 관련된 코드가 들어있었다면 Service Layer이 오직 자신의 본연의 임무에만 충실할 수 있도록 코드가 다음과 같이 바뛰게 됩니다. public class ProductServiceImpl implements ProductService { private ProductDao productDao; public void setProductDao(ProductDao

hibernate

12.2.6. Programmatic transaction demarcation

프로그래밍적인 방법으로 트랜잭션 경계를 지정하는 방법은 다음과 같이 비즈니스 로직 부분에 PlatformTransactionManager 를 인스턴스로 등록하고 Setter Injection을 사용하는 것입니다. <beans> <bean id="myTxManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="mySessionFactory"/> </bean> <

hibernate

12.2.5. Implementing DAOs based on plain Hibernate3 API

Hibernate 3.0.1 에서는 “Contexture Sessions”라고 부르는, 트랜잭션 당 하나의 current 세션을 사용하는 방법이 있습니다. public class ProductDaoImpl implements ProductDao { private SessionFactory sessionFactory; public void setSessionFactory(SessionFactory sessionFactory) { this.sessionFactory = sessionFactory; } public Collection loadProductsByCategory(String category) { return this.sessionFactory.getCurrentSession(

hibernate

레퍼런스 12장에 오타

문제가 발생한 코드는 Spring Reference에 있던 소스 코드입니다. public class ProductDaoImpl extends HibernateDaoSupport implements ProductDao { public Collection loadProductsByCategory(String category) throws DataAccessException, MyException { Session session = getSession(getSessionFactory(), false); try { List result = session.find( "from test.Product product where product.category=?", category, Hibernate.STRING); if

hibernate

12.2.4. Implementing Spring-based DAOs without callbacks

콜백 메소드를 사용하지 않고 HibernateDaoSupport로 부터 Session을 구해서 다음과 같이 코딩할 수 있습니다. public class ProductDaoImpl extends HibernateDaoSupport implements ProductDao {     public Collection loadProductsByCategory(String category)            throws DataAccessException, MyException {         Session session = getSession(getSessionFactory(

hibernate

12.2.1. Resource management

자원을 관리하는 코드가 보통 사방에 흩어져 있게 됩니다. 하지만 스프링에서는 이런 자원 관리간단하면서도 강력한 방법인 tamplate을 사용한 IoC를 이용해서 관리합니다. 자원을 관리하는 기능과 SQLException을 보다 구체적이고 un-checked Exception인 DataAccessException으로 래핑해줍니다. HibernateTemplate, HibernateInterceptor, HibernateTransactionManager 이런 클래스들을 제공하는 가장 주요한 목적1. 어플리케이션에서 Data Access와 Transaction 기술을

hibernate

JUnit 으로 Hibernate 테스트

지난번에는 PizzaApp 클래스에서 새로운 피자 객체를 만들고 save()를 사용해서 DB에 insert를 했었습니다. 이번에는 PizzaTest 클래스를 만들고 JUnit을 사용해 봅니다. save()를 사용해서 DB에 피자 한판을 넣어보고 들어갔는지 빼내어 보고 빼낸 것이 null이 아닌지 확인해 봅니다. 연습용이기 때문에 test가 별로 맘에 안드실 수도 있습니다.

모델 수정하기

1-6. 모델 클래스 수정하기

Pizza 클래스에 새로운 필드를 추가해 봅니다. toping이라는 멤버를 추가하고 역시 어노테이션을 사용하여 @Column으로 지정해 줍니다. 그리고 getter, setter를 만들어 준뒤 PizzaApp 클래스에 적당한 값들로 세팅해 주고 save를 해봅시다.[#M_ more.. | less.. | //Pizza.java … private String toping; … @Column    public String getToping(

You've successfully subscribed to Whiteship!
Could not sign up! Invalid sign up link.