8. 트랜잭션#
AltibaseDatabase는 수동 트랜잭션 제어를 지원한다.
트랜잭션 메서드#
| 메서드 | 설명 |
|---|---|
| startTransaction() | 트랜잭션 시작 |
| endTransaction() | 트랜잭션 커밋 |
| abortTransaction() | 트랜잭션 롤백 |
| isTransactionActive() | 트랜잭션 활성 상태 확인 |
예제: 수동 트랜잭션#
try (AltibaseDatabase db = AltibaseClient.getDatabase(url)) {
AltibaseCollection orders = db.getCollection("orders");
AltibaseCollection inventory = db.getCollection("inventory");
db.startTransaction();
try {
// 주문 생성
AltibaseDocument order = orders.createDocument(
"{\"product\": \"laptop\", \"quantity\": 1}"
);
orders.insertOne(order);
// 재고 감소
AltibaseDocument filter = AltibaseDocument.parse("{\"product\": \"laptop\"}");
AltibaseDocument newInventory = inventory.createDocument(
"{\"product\": \"laptop\", \"stock\": 99}"
);
inventory.replaceOneByCond(filter, newInventory);
// 커밋
db.endTransaction();
System.out.println("주문 완료");
} catch (Exception e) {
// 롤백
db.abortTransaction();
System.err.println("주문 실패, 롤백됨: " + e.getMessage());
}
}
예제: 트랜잭션 상태 확인#
try (AltibaseDatabase db = AltibaseClient.getDatabase(url)) {
System.out.println("트랜잭션 활성: " + db.isTransactionActive()); // false
db.startTransaction();
System.out.println("트랜잭션 활성: " + db.isTransactionActive()); // true
db.endTransaction();
System.out.println("트랜잭션 활성: " + db.isTransactionActive()); // false
}