2013-09-05 2 views
0

데이터베이스에 지속 된 기본값이있는 응용 프로그램이 있습니다.ManyToOne 기본값

+--------+------------+ 
| cityId | cityName | 
+--------+------------+ 
|  0 | 'New York' | 
+--------+------------+ 

그리고 제가하고 싶은 저장하는 것입니다 : 예를 들어 는 속성 시티 느릅 나무의 기본값 클래스 사람은 ID 0

@Entity 
public class Person { 
    @Id 
    private Integer personId; 

    private String name; 

    @ManyToOne 
    private City city; 
} 

@Entity 
public class City { 
    @Id 
    private Integer cityId; 

    private String cityName; 
} 

그리고 데이터베이스와 "뉴욕"입니다 새로운 담당자 : 내가 ID 0와 이름 파크 도시 인스턴스를 만들려고하면

Person p = new Person(); 
p.setName("Smith"); 
personRepository.save(p); 

는 "뉴욕"나는 것 "TransientObjectException : 개체가 저장되지 않은 과도 인스턴스를 참조"definitel를 좋은 해결책이 아닙니다.

테이블 정의에 기본값을 넣으면 저장 한 후 엔티티를 데이터베이스에서 다시로드해야합니다.

사람을 저장하기 전에 도시를로드 할 수 있지만 데이터베이스에 액세스 할 수도 있습니다.

데이터베이스에서 City 인스턴스를 명시 적으로로드해야하기 때문에이 두 가지 솔루션이 좋지 않습니다. 자동으로 할 수있는 방법이 있습니까? (그런 어쩌면 인터셉터 또는 무언가)

NB : 내가 ID 0와 이름 파크 도시 인스턴스를 만들려고하면 내가 네 봄 3.2

답변

1

최대 절전 모드 사용 "뉴욕"내가 가진 것 " TransientObjectException : 개체가 저장되지 않은 임시 인스턴스를 참조합니다. "

이렇게해서는 안됩니다. 아마도 기본 도시의 id0이라는 사실 때문일 것입니다. 대신 1을 사용해보십시오.

또는 Session.load()/EntityManager.getReference()을 사용하여 데이터베이스를 건드리지 않고도 지연 프록시를 얻을 수 있습니다.

+0

지정하지 않으면 ID가 0 인 도시를 사용하고 싶습니다. 새 이름을 만들지 않습니다. 'Session.load()/EntityManager.getReference()'를 사용하여 사용자가 원하는 것을 이해하지 못합니다. –

+0

확인 : http://docs.jboss.org/hibernate/orm/4.2/devguide/en-US/html_single/#d5e836. 필요하지 않다면 데이터베이스 액세스를 피할 수 있지만 저장하기 전에 수동으로해야합니다. –