2014-03-12 4 views
1

REST API에 mongodb with spring mvc을 사용하고 있습니다. 이벤트에 대한 설명을 추가하는 컨트롤러가 있습니다. 이 컨트롤러는 내 이벤트 서비스의 메소드를 사용합니다. 그리고 그것들의 구현은 아래와 같습니다. 그러나 내 mongodb 연결이 마치 transaction없이 작동하는 것처럼 보인다. 내 컨트롤러에 덧글을 추가하는 1 insert1 update 있습니다. 이벤트 업데이트로 인해 오류가 발생하면 삽입 요청이 커밋됩니다. 롤백을 수행하지 않는 이유는 무엇입니까? 이 문제를 어떻게 해결할 수 있습니까?MongoDB의 스프링 데이터

public Comments addComment(Comments comment) throws Exception{ 
    comment.setCommentDate(SowUtil.getDateTimeDB()); 
    comment.setCommenter(personService.findPersonById("531cc90e3c37b20bef47dfc7")); 
    mongoTemplate.insert(comment); 
    Events adv = findEventById(comment.getEventId()); 
    adv.addComment(comment); 
    eventService.save(adv); 
    return comment; 
} 

답변

0

MongoDB에는 RDBMS와 동일한 트랜잭션 개념이 없습니다. 귀하의 예를 기반으로, 당신은 두 개의 문서를 사용하는 것 같습니다.

MongoDB에는 여러 문서 ( http://docs.mongodb.org/manual/tutorial/perform-two-phase-commits/)가 포함 된 2 단계 커밋 패턴에 대한 기사가 있습니다. 롤백을 구현하는 데 도움이 될 수 있습니까?

나는 Spring이 MongoDB (http://docs.spring.io/spring-integration/reference/html/mongodb.html)에 대한 트랜잭션 지원 개념을 가지고 있다고 믿는다.

+0

솔직히 저는 놀랐습니다. 요청과 응답주기 사이의 모든 커밋에 대한 트랜잭션을 유지해야합니다. 당신이 제공 한 첫 번째 링크는 일종의 해결 방법이며 시스템이 느려지고 있습니다. 나는 해결책이 있어야한다고 생각한다. 계속 검색하고 있습니다. – Emilla

+0

또는 위에서 설명한 내 모델에 대해 더 나은 데이터 표현을위한 조언을 드릴 수 있습니다. 내 질문에서 알 수 있듯이 이벤트와 의견 사이에는 OnetoMany 관계가 있습니다. 그리고 그것이 내가 2 개의 문서를 가져야한다고 생각한 이유입니다. 조언하나요? 대신 1 개의 문서가 있어야합니다 – Emilla

+0

데이터 모델을 변경하기 전에 RDBMS를 사용하지 않는 특별한 이유가 있습니까? 또한 Spring의 트랜잭션 동기화 기능을 살펴 보았습니까? – ChristopherZ

관련 문제