Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 8287209
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 8, 20262026-06-08T11:58:24+00:00 2026-06-08T11:58:24+00:00

I have the following domain object: class Cat { String name; int age; }

  • 0

I have the following domain object:

class Cat  
{  
    String name;  
    int age;  
}

and the following statement to do batch inserts of cats:

void insertBulkCats(Collection<Cat> cats)  
{  
    Connection conn = getConnection();  
    PreparedStatement statement = new PreparedStatement();  
    for(Cat cat : cats)  
    {  
       statement.setString(1, cat.getName());  
       statement.setInt(2, cat.getAge());
       statement.addBatch();
    }     
    statement.executeBatch();  
    PreparedStatement mergeStatement = conn.prepareStatement(MERGE_CATS);  
    mergeStatement.execute();
    PreparedStatement dropStatement = conn.prepareStatement(CLEAR_CATS);    
    dropStatement.execute();  
    conn.commit();
}  

This is an Oracle database. As the steps I want to perform are insert all cats, do a merge against my archived cats, then drop all records from the original cats that were inserted. My concern is that this approach above does not guarantee a rollback or a solitary operation to occur. My question is how do I guarantee that this executes all as one atomic operation? Additionally how can I guarantee that no other function touches the database (in terms of doing updates to the Cat table) that are not reads?

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-08T11:58:26+00:00Added an answer on June 8, 2026 at 11:58 am

    Atomicity is a feature of ACID DBMS. It is automatic in Oracle : run all your DML (update/insert/delete), once you are done issue a commit. You are guaranteed that the operations will be saved as an indivisible transaction (if the commit fails nothing is saved).

    In JDBC you have to make sure to turn off autocommit.

    Concerning concurrency, it is also an integrated feature of most DBMS, although the behaviours of locking can be different among major DBMS.

    In Oracle writes don’t block reads, although other transactions won’t see your changes until you have committed: this isolation is implemented via multi-versionning. The locking mechanism of DML is at the row level. Only one transaction can modify a row at the same time. A common pattern in Oracle for a unit of work would be:

    1. Select the rows you want to modify with the clause FOR UPDATE. This will put a lock on the rows and other transactions won’t be able to modify these rows until you commit or rollback.
    2. Do all your DML without intermediate commit
    3. Commit on success or rollback in case of error.

    For further reading: more on transaction management, more on concurrency and locking.

    Locking a whole table is rare in Oracle, although it is a possibility. The LOCK TABLE command can be used to prevent any modification from other sessions to an entire table.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I have the following Grails domain class: class Product { String name Float basePrice
I have the following Domain Object: public class DomainClass { public int Id {
I have the following domain object: public class Data { public virtual int ID
I have the following domain: public class FileInformation { public String FileName; public String
I have added the following method in my User Domain class String getNameAttribute(){ return
I have the following domain object: public class DomainObject<T,TRepo> where T : DomainObject<T> where
I have the following domain object : class DbDeployment { static constraints = {
I have the following domain object: public class Bank : IEntity { } And
So let's say we have a domain object such as the following public class
If I have the following domain object: public class Customer { public virtual Guid

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.