데이터베이스에 지속 된 기본값이있는 응용 프로그램이 있습니다.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
지정하지 않으면 ID가 0 인 도시를 사용하고 싶습니다. 새 이름을 만들지 않습니다. 'Session.load()/EntityManager.getReference()'를 사용하여 사용자가 원하는 것을 이해하지 못합니다. –
확인 : http://docs.jboss.org/hibernate/orm/4.2/devguide/en-US/html_single/#d5e836. 필요하지 않다면 데이터베이스 액세스를 피할 수 있지만 저장하기 전에 수동으로해야합니다. –