Search code examples
javahibernatehbm

avoid duplication with auto increment key in Hibernate


I am trying to use Hibernate to auto increment the id, however, I try to avoid duplication.

class Service
{
    Long id; // auto increment
    String name;
    String owner;
    Boolean incremental;


// setter and getter
}

What I want to achieve is, whenever the new service object I want to save has the same name and owner(no matter if the data field incremental are the same or not) as any of the existing one in the database, it will be a duplicated entry. In this case, I don't want to add another entry into the Database anymore. How to revise the hbm.xml files to avoid this issue?


Solution

  • If you need the id column, you can keep it. What you need is * a unique constraint at the database level on both columns.

    (if you use hbmtoddl tool, you may need something like that :

    <properties name="key" unique="true">
        <property name="name" .../>
        <property name="owner" .../>
    </properties>
    

    )

    This way, you can not insert duplicates data.

    After that if you don't want your code to break when you try to insert duplicates, you need to

    • lookup by name and owner (if you do that often, an index might be a good idea)
    • if you don't find the entry, insert it
    • you might also want to catch the exception thrown in case of unique constraint violation (yes that may still happen if two threads are inserting data at the same time) and retry a select.