두 객체 Customer와 Transaction이 있습니다. 그들은 다음과 같이 보입니다.ManyToOne 매핑에 객체가 없으면 객체를로드하는 방법은 없습니다.
@Entity
class Transaction {
@Id
long id;
@Column("CUSTOMER_ID")
long customerId;
@ManyToOne
@JoinColumn(name="CUSTOMER_ID", insertable=false, updatable=false, nullable=false)
Customer customer
...
}
@Entity
class Customer {
@ID
long id;
...
}
우리는 가짜 고객 번호를 사용하여 일부 트랜잭션 유형을 식별합니다. 변화를 위해 아무 것도 할 수 없으며 통제 할 수없는 여러 가지 다른 프로세스가 의존하는 관행입니다.
내가 할 수 있기를 원하는 것은 가짜 고객 거래에 대한 고객 번호를 얻고 내 거래 개체에 null 고객이 있다는 것입니다. 더미 고객이 아닌 거래의 경우 고객 오브젝트를 설정해야합니다. 이상적으로는 가짜 고객 번호를 테스트하고 별도의 쿼리를 실행하지 않아도됩니다.
쿼리를 작성하고이를 수행하도록 내 개체를 매핑하려면 어떻게해야합니까? 지금 내가 시도한 모든 것, 거짓 정책 ID에 대한 EntityNotFound 예외로 끝납니다.
최대 절전 모드를 사용하고 있습니다. 문제는 CUSTOMER_ID가 null 인 경우가 아니라 null이 아니지만 객체를 참조하지 않는 경우입니다. 우리는 해당 고객 객체가없는 특정 더미 고객 ID를 가지고 있습니다. 위에서 말했듯이, 불행하게도 다른 프로세스와 시스템이 의존하기 때문에 제거 할 수없는 유물입니다. – AndrewMcCall
이 문제는 Hibernate가 프록시를 사용하여 지연로드를 구현하는 방식에만 해당되며, 프록시를 사용하지 않는 다른 JPA 구현에서는이 문제가 발생하지 않습니다. EAGER로 설정하면 문제가 해결됩니다. – James
엔티티가 존재할 때 엔티티가로드되지 않는다는 것은 아닙니다. 문제는 엔티티가 존재하지 않을 때, 예외를 던진 더미 고객 중 하나 일 때입니다. – AndrewMcCall