본문 바로가기

Programming!

JPA 코드성 데이터의 매핑 이런 방식을 처리하는 방법은 많다. 그중 하나만 참고. 우성 Forum / ForumCategory Entity가 있다고 치자. forum id PK forumCategoryId forum_category id PK name 조건으로 하나의 forum이 하나의 category만 가질 수 있는 형태로 보자. 이경우 OneToOne이 바로 나오기는 하는데, 어쩐지 MapsId 나 OneToOne 자체에 대해 고민도 하고 그렇게 된다.. 근데 어짜피 카테고리의 관리 주체도 일반적인 사용자가 아니고 관리자이며, forum의 저장시 forum_category의 데이터 저장은 불필요하기 때문에(forum 테이블의 forumCategoryId 만 저장되면 된다.) 그런 고민이 과연 필요할까 싶다.?? 그냥 이 경우는.. 더보기
단일테이블의 Tree 구조를 위한 Self Join Oracle의 tree 구조 start with/connect by 형태와 동일하게 구현하고자 할 경우, JPA도 Self Releastion으로 처리할 수 있다. 가령 ForumCategory Entity가 존재한다면 다음과 같이 처리된다. public class ForumCategory { @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "id") private Long id; @Where(clause = "deleted='N'") @ManyToOne(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY) @JoinColumn(name = "parentId") private ForumCa.. 더보기
JPA - 필드에 Trim 적용하기 두가지의 방법이 있다. 첫번째는 JBoss-Hibernate에서 제공되는 @ColumnTransformer를 사용하는 방법과 Listener를 적용하는 방법. DB에 종속적인 모델이지만, 개인적으로는 첫번째 방법인 ColumnTransformer를 추천한다. ColumnTransformer를 적용하는 방법. .. @ColumnTransformer(write="trim(?)") @Column(name = "title", nullable = false) private String title;.. TrimListener를 만들어 적용하는 방법 @Trim Annotaion을 지정한다고 보면, Annotaion의 적용 대상은 method나 field일 것이다. 그러니 @interface의 적용 대상을 field,.. 더보기
guava의 Iterables.isEmpty java null.. lib들을 사용하다보면 어떤 놈들은 null처리가 되어 있는 놈들이 있는가 하면, 그냥 null exception 을 내뱉는 놈들도 있다. 가령 guava의 Iterables.isEmpty(Iterable..)를 무심결에 썼는데 nullpointerexception 을 내뱉에 버린다. /** * Determines if the given iterable contains no elements. * * There is no precise {@link Iterator} equivalent to this method, since * one can only ask an iterator whether it has any elements remaining * (which one does usin.. 더보기
spring data jpa의 @Query nativeQuery의 IN 절 처리. 오늘 좀 시간을 보낸 문제- 기존 jpa의 sql이 복작도가 증가함에 따라 nativeQuery를 사용하게 됨.- IN 절을 기존과 같이 o.enumTypes in :enumTypes 를 그대로 사용해서 @Param으로 넘김 이때 @Param의 List는 enum클래스임 List- 일반 jpql이였을 경우는 결과가 잘나옴. - 그러나 nativeQuery로 변경 후에는 결과가 나오지 않음. 에러 없음.- 원인은 nativeQuery사용시에는 IN절에 들어가는 Param List에는 String, Long 과 같은 타입만 허용됨. .... and fvd.vendorDivisionType in :vendorDivisionTypes ... - 수정전 List findByXXXXXX(@Param("vendorD.. 더보기