2013-06-19 5 views
0

테이블 을 정확히 하나의 행과 함께 생성해야합니다.grails hibernate 정확히 하나의 행을 가진 테이블을 생성하십시오.

도메인 클래스가 있습니다 (예 : Book). 속성은 Year입니다.

class Book { 

    Integer year 

    static mapping = { 
    ... 
    } 

} 

도메인 클래스에 무엇을 써야합니까? 당신이 년 2013 만 한 권의 책 기록을 필요로하는 경우

+0

행의 수를 제한한다고 생각하지 않습니다. 1 년 동안 고유 한 제약 조건을 가질 수 있습니다. 충분합니까? – elias

답변

0

는 예를 들어, 당신은 당신의 제약 조건을 정의 할 수 있습니다

class Book { 
    Integer year 
    static constraints = { 
    year inList: [2013], unique: true 
    } 
} 
unique: true 당신이 하나를 가지고 있는지 확인합니다 중복 yearinList 레코드를 만들 수 없습니다

year 하나는 2013입니다. 두 제약 조건은 첫 번째 삽입에 대해 통과하며 후속 삽입/업데이트에 실패합니다. 따라서 Book 년에 2013 년 한 레코드 만 남게됩니다.

0

불행하게도이 beforeInsert을 수행하는 데 사용하는 GORM 이벤트는 삽입을 거부합니다 (Grails 2.2.2). beforeUpdate하지만이 경우에는 도움이되지 않습니다. 삽입할지 여부의 의사 결정을 수행하는 서비스 방법을 사용하여

  • :

    두 가지 마음에 와서 솔루션이 있습니다. 그러나 다른 클래스가 도메인 클래스를 직접 사용하면 자동 삽입 거부가 발생하지 않습니다.

  • 테이블에 이미 데이터가 있는지 확인하는 사용자 지정 최대 절전 모드 PreInsertEventListener을 만듭니다.

는 버트 백 위드는 후자의 예를 좋아하면 자신의 gr8Conf session from 2011에 도메인 클래스 효과적으로 읽기 전용을 만들기위한 사용자 정의 최대 절전 모드 이벤트 리스너를 사용하여 설명했다.

관련 문제