2014-06-06 2 views
1

테이블에 createdAt 열이 있습니다.이 테이블은 처음 생성 된 후에 업데이트하지 않으려합니다. 그러므로 나는 그 정의에 updatable=false이라고 표시했다. 그러나 내가 최대 절전 모드의 업데이트 메서드를 사용하면, 업데이트되고있다. 최대 절전 모드 업데이트 쿼리 로그를 확인할 때 createdAt 필드가 업데이트 쿼리에 포함되어 있지 않지만 어쨌든 업데이트됩니다. 여기에 내가 사용하고있는 코드 (I 최대 절전 4 일)업데이트 할 수있는 잘못된 열이 업데이트 중입니다.

--EDIT-- 내가 데이터베이스로 MySQL을 사용하고 분명히 MySQL의 워크 벤치는 기본적으로 열을에 타임 스탬프 CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 속성을 추가 할 수 있습니다. 최대 절전 모드 문제로 인해 ON UPDATE CURRENT_TIMESTAMP 업데이트가 제거 된 후 해결되었습니다. 그것은 보통 문제가 될한다

Session session = null; 
try { 
    session = currentSession(); 
    session.beginTransaction(); 
    session.update(user); 
    commitTransactionOfGivenSession(session); 
} catch (HibernateException exc) { 
    logRollbackAndThrowHibernateException(exc, session); 
} finally { 
    closeSession(session); 
} 

최대 절전 모드 로그인 createdAt 필드

update 
    example_schema.Users 
set 
    lastLogin=?, 
    lastNotifiedAt=?, 
    userName=?, 
    waitingSince=? 
where 
    userId=? 
+0

데이터베이스에는 어떤 DBMS가 정의되어 있습니까? 테이블에 컬럼이 갱신되도록하는 트리거가 있습니까? – DaveH

+0

mysql을 사용 중이며 필드가 TIMESTAMP로 정의되어 있습니다. 이제 mysql "CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP"에 의해 자동 생성되는 기본값이 있음을 알 수 있습니다. 이 제거하려면 노력하고 있지만 mysql 내 변경을 무시하는 것 같다. – cubbuk

답변

0

mysql을 데이터베이스로 사용하고 있으며 분명히 mysql workbench는 타임 스탬프 열에 CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 속성을 기본적으로 추가합니다. ON UPDATE CURRENT_TIMESTAMP 속성을 제거하면 문제가 해결됩니다.

0

를 포함하지 않는다 : 여기

업데이트 방법 열 정의 다음

@Temporal(TemporalType.TIMESTAMP) 
@Column(name = "createdAt", nullable = false, length = 19, updatable = false) 
public Date getCreatedAt() { 
    return createdAt; 
} 

입니다 필드 대신 필드에 주석을 달았습니다. 클래스에 추가 주석을 달지 않은 경우 getter (속성) 또는 필드 (클래스 변수)에만 주석을다는 일관성을 유지해야합니다.

-1

created_at 열에서 ON UPDATE CURRENT_TIMESTAMP 속성을 제거해야합니다.

ALTER TABLE `DATABASE_NAME`.`TABLE_NAME` CHANGE `create_at` `create_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP 
관련 문제