2016-06-16 1 views
0

나는 데이터베이스에서 데이터를 수정할 수있는 웹 응용 프로그램을 만들고 있습니다. 사용자가 검색 기준 (예 : 이름 또는 성)을 지정한 다음 응용 프로그램은 주어진 기준에 따라 데이터를 검색하고 UI에 표시하며 사용자가 데이터를 편집하고 '저장'버튼을 누릅니다.GORM - 별도의 테이블에서 읽기/쓰기

현재 모든 수정 사항은 동일한 테이블 (person)에 적용됩니다. 하지만 응용 프로그램의 논리를 변경해야합니다. 읽기 작업 (SELECT)은 하나의 테이블 (person)에 적용해야합니다. 모두 작업 (INSERT, UPDATE 등)을 다른 테이블 (person_changes)에 적용해야합니다. 다른 GORM 설정을 매핑하거나 조정하여 이러한 동작을 수행 할 수 있습니까? 또는 각 SELECT, INSERT, UPDATE에 대해 HQL 쿼리를 작성해야합니까?

지금 내 도메인 클래스는 다음과 같습니다

class Person implements Serializable { 
    private static final long serialVersionUID = -6023326467985259987L; 

    String id 
    String name 
    String surname 

    static mapping = { 
     datasource 'stuff' 
     table 'person' 
     cache true 
     version false 
     id column: 'id', generator: 'assigned' 
    } 

    static constraints = { 
     id(bindable: true, nullable: false, blank: false) 
    } 
} 

내가 Grails는 2.3.11최대 절전 모드 3.6.10.19를 사용합니다.

+1

[ 'stuff', 'main'] 두 DSN 다음 Person 클래스를 PersonEdit 클래스로 확장 한 다음이 'stuff'의 데이터 소스를 작성할 수 있습니다. 그런 다음 실제 데이터가 들어있는 데이터베이스 1 개와 실제 데이터 + 업데이트가 포함 된 데이터베이스 2 개로 자동 종료됩니다. 그러면 두 데이터베이스 모두를 비교할 수 있습니다. 실제로이 모든 광기 대신 참고 용으로 역사적인 테이블에있는 테이블 변경의 기록을 유지할 필요가있는 것 같습니다. – Vahid

답변

3

다른 GORM 설정을 매핑하거나 조정하여 이러한 동작을 달성 할 수 있습니까?

없음

아니면 각 SELECT, INSERT에 대한 HQL 쿼리를 개발해야, UPDATE?

HQL이 도움이되지 않습니다. Hibernate (따라서 GORM)은 기본적으로 영속 클래스가 항상 같은 테이블에서 읽고 쓰여지는 것으로 가정합니다.

솔직히 말하면, 당신이 읽고있는 테이블과 다른 테이블에 글쓰기를한다면이 요구 사항은 완전히 이상하게 들립니다. 에서, 당신은 어떻게 실제로 아무것도 읽을 것입니까?

+0

예, 이상한 요구 사항입니다. 매월 우리 조직은 CD에서 데이터베이스를 가져옵니다 (회사 정책 - 여기서는 더 말할 수 없습니다 ...). 그러나 때로는이 데이터가 약간 잘못되었습니다 (예 : 성이 누락 된 경우 등). 따라서 우리는 그러한 데이텀에 작은 수정을 적용해야합니다. 그러나 이제는 CD에서 가져온 테이블의 데이터를 변경할 수 없습니다. 모든 변경 사항을 보관할 수있는 새 테이블을 만들었습니다. 따라서 모든 변경된 데이텀은 별개의 테이블 (버전 관리라고도 함)에 나타납니다. 나는 DAO 레이어에서 최소한의 개입으로 ** 읽기 ** 작업과 ** 쓰기 ** 작업을 분리하는 가장 간단한 솔루션을 찾고 있습니다. – flaz14

+0

INSERT, UPDATE 및 DELETE 및 데이터베이스 뷰에서 데이터베이스 규칙 (실제로 PostgreSQL을 사용함)을 사용하여 문제를 협상 할 수 있음을 알았습니다. 따라서 소스 코드를 전혀 접할 필요가 없습니다! – flaz14

관련 문제