본문 바로가기

Hibernate4

Hibernate Incorrect datetime value Incorrect datetime value 잘 입력되었던 데이터가 갑자기 위와 같은 문구를 보여주면서 에러를 내기 시작했다. 이유는... TIMESTAMP 때문이다. TIMESTAMP의 범위는 1970-01-01 부터 2038-01-19 까지라서 1970 이하 날짜를 입력하지 못하는 것이다. 자세한 사항은 여기서 살펴보자~! 더보기
org.hibernate.hibernateexception identifier of an instance of was altered from to 위와 같은 에러가 발생했을 때는 Model의 Id 부분을 확인하자 본인의 경우 착각으로 인해 Id 값을 바꾸려고 하다보니 생긴 에러였다. 본인의 경우 Model의 ID부분을 다른 타입으로 변경하여 의도적으로 문법을 틀리게 하여 찾았다. 더보기
[Hibernate] 구분자 열 사용하기 테이블에 구분자 열을 추가하여 구분자 열로 Model을 생성하는 방법이 있다.우선 Super 클래스 에서는 아래와 같이 작성 @DiscriminatorColumn (name = "type",discriminatorType = DiscriminatorType.STRING) public abstract class Info { Child 클래스 에서는 아래와 같이 작성 @DiscriminatorValue (value = "MOVIE") public class MovieInfo extends Info 이와 같이 사용하면 되고 상속 전략에 따라서 @Inheritance 바꾸어서 사용하자 더보기
[Hibernate] HQL문 몇가지 정리 1. 특정 Column의 가장 높은 값을 가져오는 구문%s.score in (SELECT MAX(%s2.score) FROM %s %s2 WHERE %s2.userNo = :userNo) 2. 특정 Column의 내림차순으로 정리WHERE interest.interestNo = ANY(SELECT s.interestNo FROM InterestUserScore s WHERE s.userNo = :userNo ORDER BY s.score DESC) 3. Left JoinstringBuffer.append("SELECT DISTINCT d FROM Drama d " + "LEFT JOIN d.genreList genre " + "LEFT JOIN d.actorList actor " + "LEFT JOIN .. 더보기
[Hibernate] Property 상속하여 매핑하기 가장 간단한 방법이다. 여러가지 방법이 있지만 그 중 @MappedSuperclass 것을 사용해보겠다. 사용 용도는 주로 중복되는 프로퍼티가 많을때 괜찮은 방법인듯하다. @MappedSuperclasspublic abstract class UserScore {//Getter & Setter @Id@GeneratedValue@Column (name = "score_no")private Integer scoreNo;@Column (name = "user_no")private Integer userNo;@Column (name = "score")private Integer score; }//end UserScore Class 상속하여 이렇게 쓰면 끝이다.~! @Entity@Table (name = "dram.. 더보기
[Hibernate] Embedded 사용하기 공통적으로 들어가는 Column 값이 있다면 이 값을 따로 Class로 만들어서 사용하면 좋다.본인의 경우 Image 관련 값을 Class로 만들어서 사용했다 사용방법은 간단하다 아래와 같이 NHImageFile Class에 맴버변수를 선언하고이걸 사용하는 부분에서 @Embedded 애노테이션과 함께 선언해주면 끝~! @Embeddable public class NHImageFile {Gettter & Setter} @Embedded private NHImageFile imageFile; 더보기
[Hibernate] Criteria로 List를 가져올때 중복되는 값이 있다면... List를 가져오는데 중복되는 값을 가져온다면... 아래의 코드를 입력해주자~! critera.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY); 주의 사항critera.setMaxResults() 함수와 같이 사용하는 경우에 MaxResult 만큼 가져온 후에 중복값을 제거하는 듯하다. 그래서 제대로 동작하지 못하기에HQL로 작성해서 사용하는 것이 더 좋다. 더보기
[Hibernate] update 와 merge 차이점 update 의 사용방법this.mSessionFactory.getCurrentSession().update(object);object.set~~~~~~~ merge 의 사용방법object.set~~~~~~this.mSessionFactory.getCurrentSession().merge(object); 2개의 차이점을 보면 이미 영속성(Persistent)상태이면 상황에따라 update가 되지만 그렇지 않을경우 update 함수를 통해서 영속성 상태를 가지게 만들고 그 상태에서 수정을 해야 DB에 update가 적용이 됩니다. 하지만 merge의 경우 영속성이 아닌 객체 예를들면 다른 곳에서 전달받은 객체를 DB에 적용하고 싶을때 사용하면 적합히지 않을까 생각이 됩니다. merge의 경우 id가 없는 .. 더보기
org.jasypt.exceptions.EncryptionOperationNotPossibleException 오류 암호화 라이브러리를 사용하니 다음과 같은 오류가 떴다... Caused by: org.jasypt.exceptions.EncryptionOperationNotPossibleException: Encryption raised an exception. A possible cause is you are using strong encryption algorithms and you have not installed the Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files in this Java Virtual Machine 해결방법은 간단하다.(본인의 경우 OS X 이다.)1. 우선 여기로 이동해서 파일을 받는다.!!http.. 더보기
[Hibernate] DB 특정 값 암호화하여 사용하기~! (Jasypt) Hibernate4를 기준으로 설명을 하겠습니다. 1. 라이브러리 추가 org.jasyptjasypt-hibernate41.9.1 2. hibernate 설정 PBEWithMD5AndTripleDES jasypt 4 strongHibernateStringEncryptor 3. 사용하기 (2번에서 registerdName = strongHibernateStringEncryptor 이다.) @TypeDef( name="encryptedString", typeClass=EncryptedStringType.class, parameters= { @Parameter(name="encryptorRegisteredName", value="strongHibernateStringEncryptor") }) public cl.. 더보기