본문 바로가기

개발

equal, ==, 데이터베이스로 객체를 식별하는 3가지 방법.

자바에서는 동등성과 동일성이 존재한다.

동일성을 나타내는 ==는 jvm에 정의돼 있는 개념이다. 

두 객체가 같은 메모리 위치를 가리키고 있다면 두 객체 참조는 동일하다고 보는 것이다.

==비교는  같은 클래스 형이지만 물리값이 다르면 다르다고 나오는것이다.



동등성은 equals() 메서드를 구현하는 클래스에 의해 정의되는 개념이며, 서로 다른 두 객체가 같은 값을 갖는것을 말한다. 메모리 공간상에 점유하는 위치가 각자 다르더라도 서로 다른 두 string이 같은 문자를 나타낸다면 두 string은 같다고 보는 식이다. 



영속화를 더하면 영속 객체는 데이터베이스 테이블의 특정한 한 행을 메모리 상에서 표현하게 된다. rdbms에 저장된 객체는 같은 행을 나타내거나, 동등하게 같은 테이블과 주키 값을 공유할 때 동일하다. 이 개념을 테이터베이스 동일성이라 한다.

따라서 자바 동일성과 객체 동등성을 비롯해 데이터베이스 동일성(영속 데이터 저장소에서의 위치)까지 더해지는것까지 객체를 식별하는 방법은 세 가지가 된다. 


하이버네이트는 두가지 방식으로 데이터베이스 동일성을 드러낸다.
- 영속 인스턴스의 식별자 프로퍼티 값

 

- session.getIdentifier의 반환값.

출처 - 하이버네이트 인 액션