2010-08-09 2 views
0

발전기 클래스 assigned을 사용하여 기본 키 값을 할당 해 왔습니다. 나는 hilo가 더 낫다는 것을 주장하는 몇몇 블로그를 읽었다. assigned에 대한 혜택이 hilo 이상입니까?발전기 클래스 NHibernate

+0

더 나은 방법은 할당 방법에 따라 다릅니다. 당신은 무엇을 할당합니까? – Paco

+0

@Paco : 기본 키. –

답변

3

assigned은 기본 키를 직접 정의하려는 경우에만 유용합니다.

예를 들어 다른 데이터베이스 또는 가져온 파일에서 어딘가에서 값을 얻으면 assigned이 유용 할 수 있습니다. 하지만 가장 확실한 것은 정수가 아니라 guid입니다. 비즈니스 데이터와 기본 키인 자연 기본 키를 동시에 사용할 수도 있습니다. 이것을하는 것이 바람직하지 않지만.

assigned은 특수한 경우를 말하며 일반 응용 프로그램을위한 것이 아닙니다. 일반적으로 인공 키를 사용하므로 정확한 값을 신경 쓰지 않아도됩니다. 적어도 동일한 데이터베이스를 사용하는 여러 프로세스를 고려할 때 직접 값을 생성하는 것은 어려울 수 있습니다.

assigned과 (대부분의) 다른 ID 생성기 간에는 큰 차이가 있습니다. assigned 키는 NHibernate 나 데이터베이스에 의해 주어지지 않는다. Hibernate는 id가 평가 됨으로써 엔티티가 이미 데이터베이스에 있는지를 알고있다. 자신을 지정할 때 엔티티를 삽입하거나 업데이트해야하는 경우 자신을 알아야합니다. 이것은이 id 생성기를 특별하게 만듭니다. 다른 ID 생성기를 사용할 때 assigned을 사용할 때 코드가 다르게 보일 것입니다.

+0

그래서 기본적으로 내 hbm.xml 파일을 생성자'hilo'를 사용하여 수정하고 내 엔티티에서 기본 키를 설정하는 인스턴스를 제거 할 수 있습니까? –

+1

예,'hilo' (또는'assigned '를 제외한 다른 생성자)를 사용할 때, 당신은 자신을 생성 할 필요가 없습니다. 기본 키는 엔티티가 세션에 들어갈 때 설정됩니다 (예 : Update, Merge, SaveOrUpdate 호출시). Hilo는 ID를 생성하기 위해 (대부분의 경우) 데이터베이스 왕복이 필요하지 않습니다. hilo 생성 된 ID를 직접 설정하면 이상한 동작이 발생합니다 ...) –

관련 문제