2012-04-10 4 views
0

새 개체를 추가하고 .save()를 실행하면 마지막으로 생성 된 개체 인 SELECT를 실행하면 DB가 아닌 클래스에서 검색됩니다. 즉, 날짜 속성이 ' SQL 형식으로 변환되었고 일부 프론트 엔드 코드가 망가졌습니다.최대 절전 모드에서 데이터베이스에서 개체 가져 오기

예컨대

Tue Feb 06, 2012 대신 2012-02-06 00:00:00

내 모든 오브젝트를 데이터베이스에서 가져온 얻을 있는지 확인하는 방법이 있나요?

고마워요.

+0

개체를 가져 오기 위해 중간에 모든 유형의 캐시를 사용하고 있습니까? –

답변

2

하이버 네이트는 몇 레벨의 캐시를 가지고 있습니다. 세션/첫 번째 수준의 캐시가 발생하고 있습니다. 이를 비활성화 할 방법이 없습니다. 그러나 이와 같은 일을하기를 바랄 때는 StatelessSession http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/batch.html 섹션 15.3을 사용할 수 있습니다.

올바른 형식의 날짜 문자열을 사용자에게 반환하기 위해 데이터베이스를 사용하는 경우 사용자 인터페이스, 비즈니스 로직 및 지속성 계층을 다시 생각해보십시오. 저장/검색중인 데이터를 이해할 수있는 한 데이터베이스 또는 최대 절전 모드 형식이 어떻게 처리되는지는 신경 쓰지 않아야합니다. MVC, MVVM 또는 다른 분리 패턴을 조사하십시오.

+0

자, 들으니, 나는 MVC 아키텍쳐를 가지고있다. 그리고 삽입이 일어난 후에 표시되는 데이터는 완전히 분리 된 페이지 요청에있다. 그래서 나는 이것이 일어날 것을 기대하지 않았다. JSON 형식의 객체 값을 내 JS로 전송하는 자동화 된 DTO 클래스를 사용하고 있습니다. 그러면 JS가 날짜를 처리하고, 자동으로 getDate 접근자를 호출하여 Date.toString() 메서드를 호출합니다. 표준 형식을 되 찾는 중. 그래서 나는 tostring waa를 오버라이드 할 필요가있다. – Baconbeastnz

0

기본적으로 get() 또는 load는 Cache에서 먼저 읽은 다음 데이터베이스에없는 경우 데이터베이스로 이동합니다. 또한 캐시에 추가됩니다. appropraite LockMode가있는 session.get()이 필요합니다. 기본 LockMode.NONE이 아닙니다.

플러스 나는 save()와 get() 사이에 저장 작업이 데이터베이스에 동기화되었음을 보증해야한다고 생각합니다.

+0

나는 잘못된 길로 가고있다. 나는 웹 사이트 기간 동안 세션을 열어두고 떠날 것이라고 생각했다. 각 거래마다 열어야합니까? – Baconbeastnz

+0

맞아요. 나는 이것을 고쳤습니다. 매번 객체를 커밋 할 때마다 세션을 닫습니다. 그러면 DB를 선택할 때마다 새로운 세션이 생깁니다. 추가하거나 업데이트 할 때 세션을 닫을 때만 닫을 것이라고 추측합니다. – Baconbeastnz

+0

조금 도와 줘서 다행입니다. –

관련 문제