2012-07-16 5 views
0

오늘이 문제를 발견했지만 아직 해결 방법을 찾지 못했지만이 시점에서 최대 절전 모드를 사용하는 방법을 배우기 때문에 상황을 설명하기 위해 최선을 다할 것입니다.동일한 개체를 다른 개체로 가져 오기

나는이 매우 간단한 클래스가 있습니다

public class Descripcion { 
    private long id; 
    private String descripcion; 
    private AuxTitularidad titularidad = new AuxTitularidad(); 
    private AuxTitularidad titularidad2 = new AuxTitularidad(); 

    //getters and setters below... all of them auto-generated 
} 

을 그리고 이것은 내 매핑 파일

이 매핑은 나를 위해 일한
<class name="Descripcion" table="DESCRIPCION"> 
    <id name="id" type="long" column="id"> 
     <generator class="identity"></generator> 
    </id> 
    <property name="descripcion" column="descripcion"/> 
    <many-to-one name="titularidad" class="AuxTitularidad" column="id_titularidad1" /> 
    <many-to-one name="titularidad2" class="AuxTitularidad" column="id_titularidad2"/> 
</class> 

, 아무런 문제가 전혀 "titularidad"와 "titularidad2"하지 않는 것입니다 같은 값을가집니다 (동일한 객체를 참조하십시오). 이 경우 절전 모드로 AuxTitularidad 클래스의 단일 객체를 가져 와서 "titularidad"및 "titularidad2"에 모두 사용합니다.

읽기 전용으로 가져 오는 것이 좋지만 HTML 양식을 사용하여 업데이트해야하며 "Descripcion"의 인스턴스가 " AuxTitularidad ", 그것은 단지 하나의 값을 유지합니다.

예 :

수 1 :이 새 값

titularidad: 17 
titularidad2: 23 

은 그래서 업데이트를 확인하기 위해 HTML 양식을 사용

, 그들을 지정 :

이 내 DB에 저장되어있는 값입니다
titularidad: 30 
titularidad2: 28 

작동!

수 2 :

titularidad: 12 
titularidad2: 32 

아무튼 '

titularidad: 18 
titularidad2: 18 

그래서 나는이 새로운 값을 업데이트를 확인하고이를 할당 할 HTML 양식을 사용 :이 내 DB에 저장되어있는 값입니다 일하지 마라. 그것은 DB에이를 저장합니다

titularidad: 32 
titularidad2: 32 

나는 HTML 양식에서 개체의 결합을 확인했는데이 올바른지, 나는 문제가 모두 "titularidad"와 "titularidad2의"를 개최한다는 것입니다 확실히 알 같은 객체에 대한 참조 (심지어 객체의 ID를 보았을 때). ¿ 최대 절전 모드로이를 별도의 객체로 가져 오라고 말할 수 있습니까? ¿ 일부 구성 또는 매개 변수?

미리 감사드립니다.

답변

4

예상되는 동작입니다. 주어진 세션에서 주어진 엔티티는 한 번만 존재합니다.

설명 엔터티에 다른 titularidad를 지정하려면 기존 titularidads의 필드를 수정하면 안됩니다. 이 난 그냥 개체를 가져오고 동안 내 "Descripcion"에 할당 할 수 있습니다 예상되는 동작 인 경우,

Titularidad newTitularidad = session.load(Titularidad.class, newTitularidadId); 
Titularidad newTitularidad2 = session.load(Titularidad.class, newTitularidad2Id); 
descripcion.setTitularidad(newTitularidad); 
descripcion.setTitularidad2(newTitularidad2); 
+0

확인 : 대신, 당신은이 참조를 할당 할 titularidad에 대한 참조를 얻고, 할당해야 업데이트 프로세스. 고맙습니다! – CocheLee

관련 문제