본문 바로가기

전체 글

(84)
트랜잭션 격리 수준 read uncommitted - 한 프로세스에서 여러개의 트랜잭션이 사용될 때, 하나의 트랜잭션에서 작업을 처리하고, 커밋하지 않았는데, 다른 트랜잭션에서 커밋되지 않은 데이터를 가져와서 읽는 dirty read가 발생할 수 있다. read committed - dirty read가 발생하지 않는다. non-repeatable read가 발생할 수 있다. non-reapable read란 읽는 도중에 다른 트랜잭션이 해당 데이터를 변경하는 경우, 동일한 쿼리로 SELECT를 했지만, 두 결과가 다를 수 있다. 하나의 트랜잭션이 진행되는 동안, 동일한 SELECT는 같은 결과를 반환해야하는 데, 그렇지 못하는 것을 non-repeatable read라고 한다. JPA는 기본적인 트랜잭션 격리 수준을 re..
IdClass vs EmbeddedId 복합키를 jpa에서 사용하는 방법 IdClass : pk에 해당하는 멤버변수들을 모아서 다른 클래스로 만들고, 실제로 사용할 클래스에서 IdClass annotation을 사용하여 지정함 EmbeddedId: Embeddable로 다른 클래스를 만들고, EmbeddedId로 해당 클래스를 지정해두면, 복합키로 사용할 수 있음 IdClass는 상속관계에 있어서, 부모 클래스와 자식 클래스의 멤버변수들을 복합하여 Pk로 사용하는 경우에 장점이 있고, EmbeddedId는 객체지향적으로 사용할 수 있는 장점이 있다. 둘다 serializable 인터페이스를 구현해야하고, equals, hashCode를 구현해야 한다. 기본 생성자가 있어야 한다. 식별자 클래스는 public이어야 한다. IdClass의 경우 ..
제네릭 변성 컴파일 시점에 컬렉션에 잘못된 값이 들어가는 것을 예방해준다. A가 B의 상위 타입일 때, GenericType가 GenericType의 상위 타입이 아니면, 변성 없음(invariant- 무변성, 무공변) (즉 캐스팅이 안됨) 무변성일 때, 당연히 되야할 것 같은 것이 안되는 문제가 있음 GenericType 로 하면... → 이게 해결됨( extends로 공변처리) GenericType