발전기 클래스 assigned
을 사용하여 기본 키 값을 할당 해 왔습니다. 나는 hilo
가 더 낫다는 것을 주장하는 몇몇 블로그를 읽었다. assigned
에 대한 혜택이 hilo
이상입니까?발전기 클래스 NHibernate
답변
assigned
은 기본 키를 직접 정의하려는 경우에만 유용합니다.
예를 들어 다른 데이터베이스 또는 가져온 파일에서 어딘가에서 값을 얻으면 assigned
이 유용 할 수 있습니다. 하지만 가장 확실한 것은 정수가 아니라 guid입니다. 비즈니스 데이터와 기본 키인 자연 기본 키를 동시에 사용할 수도 있습니다. 이것을하는 것이 바람직하지 않지만.
assigned
은 특수한 경우를 말하며 일반 응용 프로그램을위한 것이 아닙니다. 일반적으로 인공 키를 사용하므로 정확한 값을 신경 쓰지 않아도됩니다. 적어도 동일한 데이터베이스를 사용하는 여러 프로세스를 고려할 때 직접 값을 생성하는 것은 어려울 수 있습니다.
assigned
과 (대부분의) 다른 ID 생성기 간에는 큰 차이가 있습니다. assigned
키는 NHibernate 나 데이터베이스에 의해 주어지지 않는다. Hibernate는 id가 평가 됨으로써 엔티티가 이미 데이터베이스에 있는지를 알고있다. 자신을 지정할 때 엔티티를 삽입하거나 업데이트해야하는 경우 자신을 알아야합니다. 이것은이 id 생성기를 특별하게 만듭니다. 다른 ID 생성기를 사용할 때 assigned
을 사용할 때 코드가 다르게 보일 것입니다.
그래서 기본적으로 내 hbm.xml 파일을 생성자'hilo'를 사용하여 수정하고 내 엔티티에서 기본 키를 설정하는 인스턴스를 제거 할 수 있습니까? –
예,'hilo' (또는'assigned '를 제외한 다른 생성자)를 사용할 때, 당신은 자신을 생성 할 필요가 없습니다. 기본 키는 엔티티가 세션에 들어갈 때 설정됩니다 (예 : Update, Merge, SaveOrUpdate 호출시). Hilo는 ID를 생성하기 위해 (대부분의 경우) 데이터베이스 왕복이 필요하지 않습니다. hilo 생성 된 ID를 직접 설정하면 이상한 동작이 발생합니다 ...) –
더 나은 방법은 할당 방법에 따라 다릅니다. 당신은 무엇을 할당합니까? – Paco
@Paco : 기본 키. –