@Entity 어노테이션 붙은 클래스 필드명을 따라 컬럼명 매칭룰을 적용

이를 커스텀으로 변경

CamelCaseToUnderscoresNamingStrategy 를 상속받아 uppercase로 변경

yml 에선언

spring.jpa.hibernate:
  naming:
    physical-strategy
public class CustomColumnUppercaseStrategy extends CamelCaseToUnderscoresNamingStrategy {
    @Override
    protected Identifier getIdentifier(String name, final boolean quoted, final JdbcEnvironment jdbcEnvironment) {
        if (isCaseInsensitive(jdbcEnvironment)) {
            name = name.toUpperCase(Locale.ROOT);
        }
        return new Identifier(name, quoted);
    }
}

 

QueryDSL join 및 subquery 및 case 문 사용 예시

case문 사용시 then 값은 enum값이 들지 않으니 String 으로 변환하여 사용한다. (querydsl 5.0)

(로직적으로 처리하자)

QTbEntity innerME = new QTbEntity("ime");
        return queryFactory
                .select(Projections.constructor(TbEntity.class, tbEntity.memberId, tbEntity.roleGroup, joinBEntity.commId, joinBEntity.enumA))
                .from(tbEntity)
                .leftJoin(joinAEntity).on(tbEntity.memberId.eq(joinAEntity.userId))
                .leftJoin(joinBEntity).on(joinAEntity.commId.eq(joinBEntity.commId))
                .where(tbEntity.roleGroup.ne(
                                JPAExpressions.select(new CaseBuilder()
                                                .when(joinBEntity.enumA.eq(EnumA.EQ)).then("EQ_NAME")
                                                .when(joinBEntity.enumA.eq(EnumA.DIFF)).then("DIFF_NAME")
                                                .otherwise(tbEntity.roleGroup)
                                        ).from(innerME)
                                        .leftJoin(joinAEntity).on(innerME.memberId.eq(joinAEntity.userId))
                                        .leftJoin(joinBEntity).on(joinAEntity.commId.eq(joinBEntity.commId))
                                        .where(innerME.memberId.eq(tbEntity.memberId))
                        )
                );
@OneToMany 관계에서 List를 사용하려면 항상 mappedBy 를 하셔야할겁니다.

관련 정보는 http://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/ 문서에서 Collections 와 Indexed Collections (List,Map) 부분을 참조해보세요.


1.hql

 - SessionFactory로 session 생성후 hql 작성, Query 객체 생성. 쿼리 실행

2.session.save/delete

 - 제약이 많음 원하는 결과 도출 힘듬

3.HibernateTemplate find/get 등

 - 제약많음, 원하는결과 도출힘듬

4.Criteria

 - NoSql 방식으로서는 괜찮은 대안. 여러가지 응용가능

@Column(name="Price", columnDefinition="Decimal(10,2) default '100.00'")
출처 :  http://stackoverflow.com/questions/197045/setting-default-values-for-columns-in-jpa 


SeesionFactory를 사용할때 session이 없는 경우 발생한다.


web.xml 에 아래의 필터를 추가하여 세션을 생성.


<filter>

<filter-name>openSessionInViewFilter</filter-name>

<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>

<init-param>

<param-name>singleSession</param-name>

<param-value>true</param-value>

</init-param>

</filter>


<filter-mapping>

<filter-name>openSessionInViewFilter</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

+ Recent posts