2017-12-15 38 views
9

최대 절전 모드 current_timestamp()을 사용하여 데이터베이스 시간을 기준으로 타임 스탬프를 작성하고 싶습니다. 데이터베이스를 사용하는 서비스의 시스템 시간이 아닌 데이터베이스 시간을 사용하고 싶습니다. 2 자물쇠의 두 쿼리에 대해 데이터베이스 시간을 사용하고 있습니다.의 잠금을 해제하십시오.JPA 또는 원시 쿼리를 사용하여 시간 계산

0 :

잠금 쿼리

UPDATE MyEntity e SET e.lock = current_timestamp() WHERE e.id = :id

잠금 해제 쿼리

UPDATE MyEntity e SET e.lock = (current_timestamp() - "30 seconds") WHERE e.id = :id

내 최후의 수단은 다음과 PostgreSQL을위한 기본 쿼리를 사용하는 것입니다

시간을 더하거나 뺄 수있는 방법에 대한 설명서는 찾을 수 없습니다. 쿼리의 잠금을 해제하려면 어떻게해야합니까?

+2

Afaik 아직 지원이 없습니다 ... jpa 2.1에서는 특정 db 함수를 호출하기 위해 FUNC ('functionName', args)가 도입되었지만 여전히 db 종속적 인 것 같습니다 – Zeromus

+0

참고 : Utc를 사용하고 두통을 많이 줄이기 위해 서비스와 db를 모두 설정해야합니다. – Zeromus

+0

고마워요. 우리는 어디에서나 UTC를 사용하고 있지만 여전히 다른 인스턴스가 다른 시계에 있다고 걱정합니다. – span

답변

2

은 (데이터베이스 특정) 현재 시간 값으로 열의 기본값을 설정합니다. MySQL과 , 열은 다음과 같이 보일 것이다 :

column_name DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP 

편집을 여기

이 날짜 열을 행이 업데이트 될 때마다 업데이트됩니다 예 (MySQL의)된다

last_update DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
+0

잠금/잠금 해제 쿼리를 사용하여 행을 업데이트하는 방법을 잘 모르겠습니다. – span