hibenate 세 가지 상태의 전환
5792 단어 hibernate
jpa 를 사용 하여 데이터 베 이 스 를 조작 합 니 다.findAll()방법 으로 List 의 대상 을 찾 은 후에 이 list 의 실 체 를 조작 하 였 습 니 다.update 나 saveOrUpdate 방법 을 호출 하지 않 았 고 변 경 된 데 이 터 는 신기 하 게 데이터베이스 에 저장 되 었 습 니 다.
마지막 으로 간단 하고 거 친 해결 방법 은 이 걸 데이터 에서 찾 아 낸 List 입 니 다. 한 부 를 복사 한 후에 다시 조작 하고 되 돌 아 왔 다.데이터 가 정상 이 고 데이터 베이스 도 업데이트 되 지 않 았 다.뒤에서 자 료 를 찾 아 보 니 jpa 는 hibenate 에 대한 패키지 이 고,밑 에는 hibenate 이 며,이것 은 hibenate 의 지속 적 인 상태 에서 꾸 민 짓 이다.
2.hibenate 의 세 가지 상태
1.순간 상태(Transient)
자바 의 new 키 워드 를 통 해 실체 대상 을 만 들 때 이 실체 대상 은 자유 상태 에 있 습 니 다.다음 과 같 습 니 다.
Customer customer=new Customer(“zx”,27,images);
이때 customer 대상 은 자유 상태 인 데 왜 customer 대상 이 자유 상태 라 고 말 합 니까?이때 customer 는 JVM 을 통 해 메모리 공간 을 얻 었 을 뿐 Session 대상 의 save()방법 으로 데이터베이스 에 저장 되 지 않 았 기 때문에 Hibernate 의 캐 시 관리 에 포함 되 지 않 았 다.즉,customer 대상 은 현재 Hibernate 캐 시 관리 에서 자 유 롭 게 돌아 다 니 고 있 기 때문이다.그래서 우 리 는 자유 대상 의 가장 큰 특징 은 데이터 베이스 에 이에 대응 하 는 기록 이 존재 하지 않 는 다 는 것 을 알 수 있다.순간 대상 특징:
지구 화 대상 은 데이터베이스 에 저 장 된 실체 대상 이 며,이 실체 대상 은 현재 Hibernate 의 캐 시 관리 에 있 습 니 다.이것 은 이 실체 대상 에 대한 모든 수정 으로 캐 시 를 정리 할 때 데이터베이스 에 동기 화 됩 니 다.다음 과 같다.
Customer customer=new Customer(“zx”,27,images);
tx=session.beginTransaction();
session.save(customer);
customer=(Customer)session.load(Customer.class,”1”);
customer.setAge(28);
tx.commit();
이 때 우 리 는 session.update()방법 으로 업 데 이 트 를 저장 하 는 것 을 표시 하지 않 았 습 니 다.그러나 실체 대상 에 대한 수정 은 데이터베이스 에 동기 화 됩 니 다.이때 customer 대상 은 save 방법 으로 데이터 베 이 스 를 저장 한 후에 지구 화 대상 이 되 었 고 load 방법 으로 다시 불 러 옵 니 다.이것 은 여전히 지구 화 대상 이기 때 문 입 니 다.따라서 Hibernate 캐 시 관리 에 있 습 니 다.이 때 tx.commt()방법 을 실행 할 때 Hibernate 는 캐 시 를 자동 으로 정리 하고 영구적 인 대상 의 속성 변 화 를 데이터베이스 에 자동 으로 동기 화 합 니 다.지속 적 인 인 인 스 턴 스 는 데이터베이스 에 대응 하 는 기록 이 있 고 지속 적 인 표지(identifier)를 가지 고 있 습 니 다.
지구 대상 은 항상 Session 과 Transaction 과 연결 되 어 있 습 니 다.한 Session 에서 지구 대상 의 변 화 는 데이터 베 이 스 를 바로 변경 하지 않 고 Transaction 이 종료 되 어야 합 니 다.즉,commt()를 실행 한 후에 야 데이터 베이스 에서 SQL 을 진정 으로 실행 하여 변경 하고 지구 대상 의 상 태 는 데이터 베이스 와 동기 화 됩 니 다.동기 화 되 기 전의 지속 적 인 대상 을 더러 운 대상 이 라 고 합 니 다.
순간 대상 이 지속 대상 으로 전환:
지구 화 대상 이 하 이 버 네 이 트 의 캐 시 관리 에서 벗 어 나 면 유리 상태 에 있 습 니 다.유리 대상 과 자유 대상 의 가장 큰 차이 점 은 유리 대상 이 데이터베이스 에 해당 하 는 기록 이 존재 할 수 있 습 니 다.다만 현재 이 유리 대상 은 하 이 버 네 이 트 의 캐 시 관리 에서 벗 어 났 습 니 다.자유 대상 은 데이터베이스 에 해당 하 는 데이터 기록 이 나타 나 지 않 는 다.다음 과 같다.
Customer customer=new Customer(“zx”,27,images);
tx=session.beginTransaction();
session.save(customer);
customer=(Customer)session.load(Customer.class,”1”);
customer.setAge(28);
tx.commit();
session.close();
session 이 닫 히 면 customer 대상 은 Hibernate 의 캐 시 관리 에 있 지 않 습 니 다.그러나 이때 데이터베이스 에 customer 대상 과 대응 하 는 데이터 기록 이 존재 하기 때문에 이때 customer 대상 은 유리 상태 에 있 습 니 다.지구 대상 과 연 결 된 세 션 이 닫 히 면 대상 이 탈 관 대상 이 된다.탈 관 대상 에 대한 인용 은 여전히 유효 하 며 대상 은 계속 수정 할 수 있다.
탈 관 대상 특징:
close()나 clear(),evict()를 실행 하면 영구적 인 대상 이 탈 관 대상 이 됩 니 다.
순간 대상 이 지속 대상 으로 전환:
세 션 의 update(),saveOrUpdate(),lock()등 을 통 해 탈 관 대상 을 영구적 인 대상 으로 바 꿉 니 다.
세 가지 상태의 전환
예 를 들다
1.save(),update(),saveOrUpdate()방법 과 결합 하여 대상 의 상 태 를 설명 합 니 다.
(1)Save()방법 은 순간 대상 을 데이터베이스 에 저장 하고 대상 의 임시 상 태 는 지구 화 상태 로 변 한다.대상 이 영구적 인 상태 에 있 을 때 세 션 캐 시 에 있 습 니 다.모든 작업 은 트 랜 잭 션 을 제출 할 때 데이터베이스 에 동기 화 되 기 때문에 오래 지속 되 는 대상 에 게 save()나 update()방법 을 호출 하 는 것 은 의미 가 없습니다.예:
Student stu = new Strudnet();
stu.setCarId(“200234567”);
stu.setId(“100”);
// Session,
session.save(stu);
stu.setCardId(“20076548”);
session.save(stu); //
session.update(stu); //
// , Session
(2)update()방법 두 가지 용도 로 탈 관 대상 을 지구 화 상태 대상 으로 업데이트 대상 을 표시 합 니 다.update()를 호출 하 는 것 은 하나의 탈 관 대상 을 지속 상태 로 연결 하기 위해 서 입 니 다.대상 이 이미 지속 상태 일 때 update()를 호출 하 는 것 은 큰 의미 가 없습니다.예:
// session ,
stu = (Student)session.get(Student.class,”123456”);
stu.setName(“Body”);
session.update(stu); // stu , Session ,
stu // 。 update() , 。
// , Session
Hibernate update , Session , Hibernate update , , :
Student stu = new Strudnet();
stu.setCarId(“1234”);
// Session1,
session1.save(stu);
// , Session1
stu.set(“4567”); //
// Session2,
session2.update(stu);
// , Session2
주:session 2.update(stu)를이 문 구 는 삭제 되 었 습 니 다.사 무 를 제출 할 때 update()문 구 를 실행 합 니 다.탈 관 대상 만 바 뀌 기 를 원한 다 면 Hibernate 에서 만 update 문 구 를 생 성 할 수 있 습 니 다.맵 파일 에 있 는
(3)saveOrUpdate()방법 은 save()와 update()방법의 기능 을 겸비 하고 있 으 며,들 어 오 는 대상 에 대해 saveOrUpdate()는 우선 탈 관 대상 인지 임시 대상 인지 판단 한 다음 에 적합 한 방법 을 사용한다.
이상 은 본 고의 모든 내용 입 니 다.본 고의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 도움 이 되 기 를 바 랍 니 다.또한 저 희 를 많이 지지 해 주시 기 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA 및 PostgreSQL 텍스트다음은 의 친구들과 논의한 후 오랫동안 초안으로 작성한 블로그 게시물이며 ( ) 주제에 대한 훌륭한 기사를 작성했기 때문에 여기에 작은 테스트를 게시하고 있습니다. JPA 주석 없이 String를 선언합니다. 재현하...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.