### 문제 발생

org.hibernate.MappingException: org.hibernate.dialect.MySQLDialect does not support sequences


### 문제원인 

도메인의 @ID @GeneratedValue(strategy = GenerationType.SEQUENCE) 으로 선언해둔 부분에서 GenerationType.SEQUENCE 생성방식을 MySQL에서 지원하지 않는 것으로 보인다.


### 해결방법

GenerationType.AUTO 으로 변경


Hibernate 3.6.0.Final 을 사용하다가 4.2.Final 으로 변경하면서

MultipleBagFetchException: cannot simultaneously fetch multiple bags

이 발생하면서 entityManager가 정상적으로 밀드되지 않는 문제가 생겨남


* 관련 문제 해결 확인 :  MultipleBagFetchException: cannot simultaneously fetch multiple bags is there a workaround


@OneToMany(fetch=FetchType.EAGER)

private List<Department> departments;


형태로 선언된 부분들과 관련된 문제였다.

List 클래스와 관련된 문제가 아닐까 추측이 된다.


* 해결방법

    * 첫번째 방법

    @OneToMany(fetch=FetchType.EAGER)

    @LazyCollection(LazyCollectionOption.FALSE)  



    * 두번째 방법 

    @OneToMany(fetch=FetchType.LAZY)



* 개인적 의견 

    * 두번째 방법이 문제가 없다면, 걍 두번째 방법을 사용

    * @OneToOne의 경우에는 FetchType.EAGER 선언해도 오류없이 동작한다.

Hibernate 를 사용하다가

HibernateException – A collection with cascade=”all-delete-orphan” was no longer referenced by the owning entity instance

의 오류를 발견했다. 인터넷을 뒤지다가 이에 대한 해결책을 찾아내었다.


본문을 보면 이런 내용이 나온다.

Your likely problem

Looks like you have a Parent entity and a Child entity. The Parent has a collection of Child entities with cascade=”all-delete-orphan”.

You are setting a new collection via the setter thus leaving the original collection unreferenced by the Parent entity. This doesn’t fly well with Hibernate and leaves it confused about what to do.

parent.setChilden(new HashSet<Child>()); // This won’t work. Could be an ArrayList too.

parent.getChildren().clear(); // There, fixed that!

So generally speaking, just clear out the old collection, rather than dereferencing it and creating a new one.

정리를 해보면, 필드에 새로 생성된 빈 Set 객체를 넣으려고 할 때 문제가 발생을 하는데,

초기화하려고 하는 Set 객체에서 clear() 메소드를 호출해주면 된다는 것이다. 


관계정의 옵션으로 

orphanRemoval=true, cascade=CascadeType.ALL

의 관계가 주어졌을 때 나타나는 증상으로 보인다.

+ Recent posts