주변의 개발자들이 "인텔리j, 인텔리j"노래를 부르기에 한번 써볼까 하는 마음에 다운로드를 받아본다.

IntelliJ IDEA : http://www.jetbrains.com/idea/

현재 버전은 아래 그림에서 보다시피 IntelliJ IDEA 12 버전이다.

가격은 보는 것과 같다. 개인으로 구매하려 하면 근 $200 달러. 지난번에 25% 할인행사가 있었는데 필리핀에 있느라 구매를 못한 아쉬움이 있다.

개인적으로 사용해볼 목적으로는 Community Edition을 다운로드 받아서 실행해봐도 무리는 없을 듯 하다. 써보고 좋으면, 사는거지.


<설치화면>


출처 : http://stackoverflow.com/questions/10564684/how-to-fix-error-updating-maven-project-unsupported-iclasspathentry-kind-4

I have imported maven project in STS, when I run update update project I receive:

"Updating Maven Project". Unsupported IClasspathEntry kind=4

Is there a workaround for this?


처리방법

Have you tried:

  1. If you have import project into the eclipse 4, please delete it.
  2. In maven consol, run: mvn eclipse:clean
  3. In Eclipse 4: File -> Import -> Maven -> Existing Maven Projects

이클립스에서 사용하는 m2e plugin의 문제인 듯 한데...

일반적으로 project를 workspace 에서  임포트(import)하여 프로젝트 등록시에 m2e 가 뭔가 문제를 발생하는 것으로 보인다. @_@)> 정확한 이유는 나로서는 알 수가 없... Orz... 사용할 수 있게 임하는 것이 좋지. ㅎㅎ

  오늘 회사 동료가 알려준 방법인데, 꽤 유용할 것 같아서 이렇게 기록으로 남긴다.


  
package dreaminfra.ipams.web.assessment;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.SessionAttributes;
import org.springframework.web.bind.support.SessionStatus;

@Controller
@SessionAttributes({"simpleForm"})
@RequestMapping("/simple")
public class SimpleController {

    private final static String SIMPLE_FORM = "simpleForm";
    
    /**
     *   컨트롤러에서 @SessionAttribute({"simpleForm"}) 으로 선언한 simpleForm을 초기화하여
     * Session에서 유지하기 위해 반드시 구현해줘야 하는 부분이다.
     * @return
     */
    @ModelAttribute(SIMPLE_FORM)
    public SimpleForm createSimpleForm() {
        return new SimpleForm();
    }
    
    @RequestMapping(value="/request", method=RequestMethod.GET)
    public String request(Model model) {
        /**
         * Session에 SIMPLE_FORM을 생성하여 등록한다.
         */
        model.addAttribute(SIMPLE_FORM, new SimpleForm());
        
        return "/simple/response";
    }

    @RequestMapping(value="/response", method=RequestMethod.POST)
    public String response(@ModelAttribute(SIMPLE_FORM) SimpleForm form, SessionStatus status) {
        /**
         * Session 에 등록된 SimpleForm 은 SessionStatus.setComplete()을 실행하기 전까지는
         * Session에서 내부의 데이터를 유지하게 된다. SessionStatus.setComplete()을 실행하면
         * Controller에서 선언해둔 SessionAttribute에 등록된 form이 초기화된다. 
         */
        status.setComplete();
        
        return "redirect:/simple/request";
    }
    
    class SimpleForm {
        
        private String name;
        private String nickName;
        
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getNickName() {
            return nickName;
        }
        public void setNickName(String nickName) {
            this.nickName = nickName;
        }
    }
}


위에서 중요한 것은 Contoller 에서 선언한

SessionAttributes({"simpleForm"})

...

@ModelAttribute(SIMPLE_FORM)
    public SimpleForm createSimpleForm() {
        return new SimpleForm();
    }

...

model.addAttribute(SIMPLE_FORM, new SimpleForm());

...

session.setComplete()

부분이다.





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

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

참고사이트 : http://www.zparacha.com/remove-eclipse-workspace-dropdown-list/#.T7sxfHl1BRU

이클립스에서 Switch workspace를 자주 사용하다보면 현재 사용하지 않는 목록까지도 그대로 유지가 되면서 길어지는 경향이 있다. 이런 경우에 이클립스를 재설치를 하는 경우가 종종 있는데, 그러지 말고, 설정파일을 수정하여 가볍게 변경하도록 하자.


switch workspace 가 저장되어 있는 파일 위치

- 이클립스 설치위치//configuration/.settings/org.eclipse.ui.ide.prefs

이 파일 안에 변경했던 workspace 목록이 저장되어 있다.

MAX_RECENT_WORKSPACES=5

RECENT_WORKSPACES=/Users/ihoneymon/Documents/githubWorkspace/ipams\n/Users/ihoneymon/Documents/workspaces/dipams\n/Users/ihoneymon/Documents/workspaces/dreaminfra

RECENT_WORKSPACES_PROTOCOL=3

SHOW_WORKSPACE_SELECTION_DIALOG=false

eclipse.preferences.version=1

RECENT_WORKSPACES 에 길게 나열된 문자열 중에서 불필요한 부분을 제거하면 된다. \n 단위로 삭제하면 된다.

+ Recent posts