[Grails] 프로그램 트랜잭션
8422 단어 Grails
참고 자료
6.6 절차적 거래
Interface TransactionStatus
Service 를 사용해 보십시오.
개요
Grails를 이용해 거래를 하려고 할 때Service 를 사용해 보십시오.와 같이 서비스라는 Grails의 기능을 활용해 할 수 있다.
실제로 서비스뿐만 아니라 프로그램 맥시크를 이용하여 이 스프링을 거래하는 메커니즘도 실현할 수 있다.
GORM이 확장되어 매우 간단합니다.
견본
예를 들어, 다음 도메인이 있는 경우
Hoge.groovyclass Hoge {
String name
static constraints = {
}
}
토대
이 도메인의 거래를 실행하려면 다음 코드를 사용합니다.
HelloControllerdef index3() {
Hoge.withTransaction { TransactionStatus status ->
// 例えばINSERT
def newHoge = new Hoge(name:"koji").save()
}
render "OK"
}
위 코드는 정상적인 INSERT가 됩니다.
단순히 하고 싶은 일을 도메인 복제로 건네주는 위드트랜스 액션이라는 방법일 뿐이다.
그럼 실제로 거꾸로 돌려보세요.
뒤집다
HelloControllerdef index3() {
Hoge.withTransaction { TransactionStatus status ->
// 例えばINSERT
def newHoge = new Hoge(name:"koji").save()
status.setRollbackOnly()
}
render "OK"
}
status.setRollbackOnly()
실행 후 이 거래(withTransaction 블록 내)의 데이터베이스 변경 사항은 모두 뒤집힙니다.
트랜잭션 범위
1건의 거래=withTransaction 블록이기 때문에 withTransaction 블록이 순환 중에 여러 번 운행되면 매번 거래가 다르다.
예를 들면 다음과 같은 경우.
withTransaction 블록을 10번 실행합니다.
HelloControllerdef index3() {
(1..10) .each {Integer index ->
Hoge.withTransaction { TransactionStatus status ->
def newHoge = new Hoge(name:"koji-${index}").save()
// INSERTした結果、IDが奇数の場合はロールバックする。
if (newHoge.id % 2 != 0) {
status.setRollbackOnly()
}
}
}
render "OK"
}
이렇게 하면 INSERT에서 데이터베이스로 이동할 때 ID가 홀수일 때 롤백됩니다.
실행 결과는 다음과 같습니다.
아주 간단하네요.
다른 도메인에 대한 업데이트도 유효합니다.
또 이번에는 Hoge 도메인 이름의 withTransaction, 이 Hoge를 사용했다.withTransaction 블록에서 다른 도메인 이름을 사용할 수도 있습니다.
예를 들어 다음 도메인 이름을 준비하면 Hoge의 ID가 홀수인 경우에도 반전을 시도합니다.
Piyo.groovyclass Piyo {
String name
static constraints = {
}
}
다음 코드를 실행합니다.
HelloController.groovydef index3() {
(1..10) .each {Integer index ->
Hoge.withTransaction { TransactionStatus status ->
def newHoge = new Hoge(name:"Hoge-${index}").save()
// Hogeドメインとは関係ないドメインのINSERT
def newPiyo = new Piyo(name:"Piyo-${index}").save()
// Hogeが奇数ならロールバック
if (newHoge.id % 2 != 0) {
status.setRollbackOnly()
}
}
}
render "OK"
}
실행 결과는 다음과 같습니다.
지난번 실행 결과가 남아있어 잘 보이지 않지만, 허지에 관해서는 보통과 마찬가지로 홀수가 뒤바뀌고 전혀 상관없는 피요 도메인도 뒤바뀌었다.
총결산
복잡한 처리 등은 서비스로 하는 것이 좋지만 런스스크립트가 실행하는 일괄 처리 등 간단한 처리 등이라면 매우 편리한 기능이라고 생각합니다.
Reference
이 문제에 관하여([Grails] 프로그램 트랜잭션), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/saba1024/items/58d3c46f1443ab119c9c
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Grails를 이용해 거래를 하려고 할 때Service 를 사용해 보십시오.와 같이 서비스라는 Grails의 기능을 활용해 할 수 있다.
실제로 서비스뿐만 아니라 프로그램 맥시크를 이용하여 이 스프링을 거래하는 메커니즘도 실현할 수 있다.
GORM이 확장되어 매우 간단합니다.
견본
예를 들어, 다음 도메인이 있는 경우
Hoge.groovyclass Hoge {
String name
static constraints = {
}
}
토대
이 도메인의 거래를 실행하려면 다음 코드를 사용합니다.
HelloControllerdef index3() {
Hoge.withTransaction { TransactionStatus status ->
// 例えばINSERT
def newHoge = new Hoge(name:"koji").save()
}
render "OK"
}
위 코드는 정상적인 INSERT가 됩니다.
단순히 하고 싶은 일을 도메인 복제로 건네주는 위드트랜스 액션이라는 방법일 뿐이다.
그럼 실제로 거꾸로 돌려보세요.
뒤집다
HelloControllerdef index3() {
Hoge.withTransaction { TransactionStatus status ->
// 例えばINSERT
def newHoge = new Hoge(name:"koji").save()
status.setRollbackOnly()
}
render "OK"
}
status.setRollbackOnly()
실행 후 이 거래(withTransaction 블록 내)의 데이터베이스 변경 사항은 모두 뒤집힙니다.
트랜잭션 범위
1건의 거래=withTransaction 블록이기 때문에 withTransaction 블록이 순환 중에 여러 번 운행되면 매번 거래가 다르다.
예를 들면 다음과 같은 경우.
withTransaction 블록을 10번 실행합니다.
HelloControllerdef index3() {
(1..10) .each {Integer index ->
Hoge.withTransaction { TransactionStatus status ->
def newHoge = new Hoge(name:"koji-${index}").save()
// INSERTした結果、IDが奇数の場合はロールバックする。
if (newHoge.id % 2 != 0) {
status.setRollbackOnly()
}
}
}
render "OK"
}
이렇게 하면 INSERT에서 데이터베이스로 이동할 때 ID가 홀수일 때 롤백됩니다.
실행 결과는 다음과 같습니다.
아주 간단하네요.
다른 도메인에 대한 업데이트도 유효합니다.
또 이번에는 Hoge 도메인 이름의 withTransaction, 이 Hoge를 사용했다.withTransaction 블록에서 다른 도메인 이름을 사용할 수도 있습니다.
예를 들어 다음 도메인 이름을 준비하면 Hoge의 ID가 홀수인 경우에도 반전을 시도합니다.
Piyo.groovyclass Piyo {
String name
static constraints = {
}
}
다음 코드를 실행합니다.
HelloController.groovydef index3() {
(1..10) .each {Integer index ->
Hoge.withTransaction { TransactionStatus status ->
def newHoge = new Hoge(name:"Hoge-${index}").save()
// Hogeドメインとは関係ないドメインのINSERT
def newPiyo = new Piyo(name:"Piyo-${index}").save()
// Hogeが奇数ならロールバック
if (newHoge.id % 2 != 0) {
status.setRollbackOnly()
}
}
}
render "OK"
}
실행 결과는 다음과 같습니다.
지난번 실행 결과가 남아있어 잘 보이지 않지만, 허지에 관해서는 보통과 마찬가지로 홀수가 뒤바뀌고 전혀 상관없는 피요 도메인도 뒤바뀌었다.
총결산
복잡한 처리 등은 서비스로 하는 것이 좋지만 런스스크립트가 실행하는 일괄 처리 등 간단한 처리 등이라면 매우 편리한 기능이라고 생각합니다.
Reference
이 문제에 관하여([Grails] 프로그램 트랜잭션), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/saba1024/items/58d3c46f1443ab119c9c
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
class Hoge {
String name
static constraints = {
}
}
def index3() {
Hoge.withTransaction { TransactionStatus status ->
// 例えばINSERT
def newHoge = new Hoge(name:"koji").save()
}
render "OK"
}
def index3() {
Hoge.withTransaction { TransactionStatus status ->
// 例えばINSERT
def newHoge = new Hoge(name:"koji").save()
status.setRollbackOnly()
}
render "OK"
}
def index3() {
(1..10) .each {Integer index ->
Hoge.withTransaction { TransactionStatus status ->
def newHoge = new Hoge(name:"koji-${index}").save()
// INSERTした結果、IDが奇数の場合はロールバックする。
if (newHoge.id % 2 != 0) {
status.setRollbackOnly()
}
}
}
render "OK"
}
class Piyo {
String name
static constraints = {
}
}
def index3() {
(1..10) .each {Integer index ->
Hoge.withTransaction { TransactionStatus status ->
def newHoge = new Hoge(name:"Hoge-${index}").save()
// Hogeドメインとは関係ないドメインのINSERT
def newPiyo = new Piyo(name:"Piyo-${index}").save()
// Hogeが奇数ならロールバック
if (newHoge.id % 2 != 0) {
status.setRollbackOnly()
}
}
}
render "OK"
}
복잡한 처리 등은 서비스로 하는 것이 좋지만 런스스크립트가 실행하는 일괄 처리 등 간단한 처리 등이라면 매우 편리한 기능이라고 생각합니다.
Reference
이 문제에 관하여([Grails] 프로그램 트랜잭션), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/saba1024/items/58d3c46f1443ab119c9c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)