2012-04-30 1 views
1

나는이 작업을 전혀 수행하지 않을 수도 있습니다.cf9 ORM - 세션에 저장된 영구 객체의 속성을 변경하고 저장합니다.

현재 로그인 한 사용자의 세부 정보를 포함하는 개체를 세션 범위에 초기화하고 저장합니다.

연합사

는 제공자라고, 나는에서 사용자 성공적으로 로그를 호출 할 때입니다 :

session.Provider = New model.Provider().init(loginResult.ProviderID); 

을 나는 CFC의 방법은 빈 문자열로 지정된 값을 설정하는 것입니다 resetValues라는 가지고 있지만, 값을 재설정 한 후에 엔티티를 저장하는 방법을 알아낼 수 없습니다.

다음은 전체 CFC입니다. entitySave(this);으로 저장하려하지만 작동하지 않습니다. 이 변경 사항을 어떻게 저장해야합니까? 또는이 값을 어떻게 변경할지 완전히 다시 생각해야합니까?

많은 분들께 미리 감사드립니다.

component persistent="true" table="provider" { 
property name="id" fieldtype="id" column="provider_id"; 
property name="title" ormtype="text"; 
property name="status" ormtype="integer"; 
property name="email" ormtype="text"; 

property name="ext_src" ormtype="text"; 
property name="ext_src_login1" ormtype="text"; 
property name="ext_src_login2" ormtype="text"; 
property name="ext_src_login3" ormtype="text"; 
property name="ext_src_login4" ormtype="text"; 

//property name="rooms" fieldtype="one-to-many" cfc="Room" fkcolumn="provider_id"; 

//init() 
public function init(providerID="0"){ 
    variables.providerID = arguments.providerID; 
    return this; 
} 

//get() 
public function get(){ 
    return entityLoadByPK("Provider",variables.providerID); 
} 

//resetValues() 
public function resetValues(){ 
    this.setExt_src_login1(''); 
    this.setExt_src_login2(''); 
    this.setExt_src_login3(''); 
    this.setExt_src_login4(''); 
    entitySave(this); 
} 

} 

임 다음과 같은 오류지고 : 사물의 a different object with the same identifier value was already associated with the session

답변

3

커플 내가 잘못 참조이

  1. 의, 당신은 것입니다 요청 사이에 계속 범위에서 ORM의 entites를 저장하는 것이 바람직하지 분리 된 개체에 문제가 발생합니다 (Things to watch out for in ColdFusion 9 with CF-ORM 참조). ORM 엔티티는 요청을 스팬하지 않는 최대 절전 모드 세션 (cf 세션과 혼동하지 말 것)에 첨부됩니다. 요청이 끝나면 세션에 할당 된 엔티티는 분리됩니다. 세션에 providerid를 저장하고 각 요청에서 엔티티를 가져옵니다. 너무 많은 오버 헤드가있는 것처럼 보일 경우 ID와 이름 같은 기본 요청에 필요한 항목을 저장 한 다음 실제로 필요한 작업을 수행 할 때 엔티티 만로드하십시오.

  2. 'id'유형의 필드를 수정하면 안됩니다 (제공 업체가 "할당 됨"인 경우 제외). 하이버 네이트 세션이 존재하여 엔티티의 ID를 설정 한 다음 최대 절전 모드를 혼동하고있는 동일한 ID에() entityLoadByPK을하려고하여 그렇게 할 수 주어진 식별자 기업의 하나 개의 인스턴스 만 내부

.

id (으)로 특정 엔티티를 검색하는 get() 메소드를 원하면 서비스 나 팩토리에이 엔티티를 배치하는 것이 가장 좋습니다. 엔티티를 얻거나 찾기위한 일반적인 방법으로 추상적 인 서비스를 쉽게 만들 수 있습니다. 그런 다음 특정 요구에 맞는 방법으로 확장 할 수 있습니다. Coldspring 2는 훌륭한 출발점 인 AbstractGateway를 포함합니다 - http://sourceforge.net/apps/trac/coldspring/wiki/ORMAbstractGateway

TLDR; 수정하는 것입니다

session.provider = entityLoadByPK("Provider", loginResult.ProviderID); 
+0

크리스 .. 많이 나는 그것을하지 않을 것입니다 희망으로, 나는 그것이 그런 일 끝나게 것이라고 생각 감사합니다. 건배에 대한 큰 포인터에 대한 환호와 감사의 말 !! – Jason