다음과 같은 관계가 있습니다.
자동차는 사람이 소유하고 있습니다.
사람이 여러 자동차를 소유 할 수 있습니다.기본 키만 사용하는 Hibernate 프록시 로딩
public void insert(Car car, int idPersonOwner)
내가 자신의 ID 주어진 특정 사람을 위해 차를 삽입 할 :이 서명과 웹 서비스를
<hibernate-mapping package="fr.recouv.scribe.core.bo">
<class name="Car" table="car">
<id name="id" column="id_car" unsaved-value="0">
<generator class="sequence">
<param name="sequence">car_id_car_seq</param>
</generator>
</id>
<many-to-one name="person" update="false" column="id_person" class="Person" />
<property
</class>
: 여기
는 차의 매핑입니다. 는 지금 내 코드는 다음과 같습니다Car car = new Car();
Person owner = personDao.get(idPersonOwner);
car.setPerson(owner);
carDao.save(car);
그리고 personDao.get (idPersonOwner)의 최대 절전 모드 구현은 보이는이 방법의
public Person get(in idPerson){
return session.get(Person.class, id);
}
단점 같은 :
- 을 모든 Person 객체가로드 되어도 SQL 뷰에서 그의 ID 만 필요합니다.
- (게으른 로딩이 거짓 등으로 설정처럼) 사람의 매핑이 발전하면 더 그 2 개 쿼리를 생성 할 수있는 작업
내 실제 해결 : 그것은 바로 정수
에 외래 키를 매핑하는 것이다<property column="id_person" name="idPerson" />
이 솔루션은 객체 지향적이지 않고 덜 아름답습니다. 그리고 내가
거짓 내가 이전 및 업데이트와 같은 사람 개체를 다시 매핑 할 필요가 자동차의 소유자를 = 검색해야 내일 경우는 사람의 프록시가 함께 발생합니다 자신의 ID를 부여로드 가능 을 쿼리하여이 사람이 기본 키와 함께 있는지 확인하고 선택적으로 다른 필드를 호출하는 경우 게으른 모드로로드합니다.
나는 session.load를 시도했지만 해결책은 아닙니다. 객체는 null이 아니며 (존재 여부를 테스트하는 쿼리가 없음) 다른 필드 에 액세스하여 데이터베이스에서 실제 객체를로드 할 때까지 객체가 throw되지 않습니다.
내가 기대했다 : 당신은 정말 사람이 존재 함을 확인하고 싶다면 당신은 그 사람의 존재를 알고있을 때, 단지 부울을 반환 전용 쿼리 (또는 카운트) 및 사용
Session.load
을 실행그 최대 절전 모드는 이미 그걸 위해 뭔가를 가지고있다 : (그러나 당신의 대답에 큰 감사 !!! –