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 8418707
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 10, 20262026-06-10T02:24:07+00:00 2026-06-10T02:24:07+00:00

I know one is supposed to use a database sequence to obtain the value

  • 0

I know one is supposed to use a database sequence to obtain the value for the next key on a table (let’s assume a single-column numeric Primary Key), but in case a sequence is not used, do you see any obvious code smells with the following code (code is in Java for JPA but the pattern is really language and technology independent):

  boolean haveSucceeded = false;
  int _i = 0 ;
  while ((!haveSucceeded) && (_i++ < MAX_RETRIES)) {
     try {
          user.setId(getFacade().maxId()+1); // line A
          getFacade().create(user);          // line B
          haveSucceeded = true;
     } catch (javax.ejb.EJBTransactionRolledbackException exc) {
          debug("ConstraintValidationException, "+ ( (_i<MAX_RETRIES)?"retrying":"giving up"));
     }
  }

Where the retries are happening to account for possible clashes due to concurrent accesses (possibly from other application instances as well) and since it cannot be guaranteed that line A (where the max is calculated) and line B (where the row is inserted) will operate on the same data.

  • 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-10T02:24:09+00:00Added an answer on June 10, 2026 at 2:24 am

    This doesn’t look thread safe.
    You should, in a thread-safe way:

    • lock the user table
    • read the current max(id)
    • add 1 and use that as the next id
    • unlock the table

    This approximates what happens in the database with an autoincrement.

    If you can’t lock the table, synchronize the method, either making it static synchronized or using a static lock object, eg:

     private static final Object lock = new Object();
    
     void yourMethod() {
         synchronized (lock) {
             // your code here
         }
     }
    

    If you have multiple instances of your server running, this approach won’t be enough.

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

Sidebar

Related Questions

I have a table in a database with one column containing dates and another
I know that detecting scrollbar presence is supposed to be one of those elusive
I know one awkward solution for this taks will be : first use ct
Problem: When I use an auto-incrementing primary key in my database, this happens all
I want to have one table with two TIMESTAMP columns. One column to keep
I've been using Tika for a while and I know that one is supposed
Suppose that my index has 3 fields: title, x and y. I know one
I know one way to solve this question is to Hash the words and
I know one can add event listener for window.error. However when working with Iframes,
This is a very very basic question and I know one way is to

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.