2010-12-14 2 views
2

User이 엔티티이고 을 Session에 저장해야하는 경우 다음 요청시 분리됩니다.CF9에서 분리 된 객체로 작업하는 방법은 무엇입니까?

는 AFAIK이 분리 된 객체

를 처리하는 경우에만이 방법을 거기
  1. EntityMerge(session.user) - 다음 요청에 다시 entityLoadByPK() (더로드)
-
  • session.userID (안전하지 않은) 세션의 객체와 갱신 DB

    유일한 두 가지 해결 방법이 있습니까? 다른 방법?

    에 따르면 Advanced Techniques with ColdFusion 9 ORM Integration Slide Deck 병합시 엔티티가 변경되면 메소드 # 1과의 동시성으로 인해 오류가 발생하지만 어떻게 유용합니까? 예외를 잡아서 방법 # 2를 사용합니까?

    EntityReload()을 언제 사용합니까? 나는 그것이 과 같은 방식으로 작동한다고 생각했지만 그렇지 않습니다.

    감사합니다.

  • +0

    http://groups.google.com/group/cf-orm-dev/browse_thread/thread/5792d3a387af18ae – Henry

    답변

    3

    나는 세션에 로그인 한 사용자의 ID 만 저장하는 경향이 있습니다.

    그런 다음 필요한 경우 해당 사용자를 반환하는 UserService.getCurrentUser() facade 메소드가 있습니다.

    그런 식으로 사용자는 항상 최신이며 분리되지 않습니다.

    2

    일반적으로 세션에서 가벼운 프록시 객체 (최상위 수준 속성 만 포함)를 사용하고 설명 된 것과 완전히 동일한 필요에 따라 전체 엔터티를로드합니다. 정말로 자신을 태우고 싶지 않으면 (거기서 이야기하는 경험) # 1 방법을 사용하지 마십시오.

    +0

    가벼운 무게는 어떻게 되나요? 행동이없는 필드? 방법 # 2와 같은 속성의 구조체와 다른 점은 무엇입니까? 감사! – Henry

    +0

    +1 +1 @ 마크 만델의 대답과 @ 헨리의 옵션 # 2와 같은 개념이지만 ID보다는 조금 튼튼합니다.) +1. User ORM 엔티티에서 정보의 작은 하위 집합 (예 : id, username, fullname)이있는 UserBean을 정의하고 Coldbox beanFactory.populate를 호출하여 세션에 저장했습니다. 모든 복잡한 조회 (하위 관계)는 session.userbean.getID()를 참조합니다. – mujimu

    0

    최대 절전 모드 세션은 지연로드되고 지속되지 않습니다. 따라서 CF 객체를 메모리에 가지고있는 동안, 더 나은 용어가 없기 때문에 범위를 벗어나는 Hibernate 세션을 가리키고 있습니다. 범위를 다시 가져 오려면 기본적으로 EntitySave() 또는 EntityLoadByExample()과 같은 항목을 사용하여 이후 요청에서 깨울 필요가 있습니다.

    나는 서비스에서 래핑하면 이러한 문제를 피할 수있을뿐만 아니라, 엔티티를 직접적으로 만지는 것보다 전반적으로 구조적으로 더 좋습니다.