Skip to main content

Why should not use the AUTO JPA GenerationType with MySQL and Hibernate

Introduction

As I already mentioned, you should never use the TABLE identifier generator since it does not scale properly. In this post, I’ll show you why you should not rely on the AUTO GenerationType strategy if you’re Hibernate application uses MySQL.

Prior to Hibernate 5

On Hibernate 4, if you had the following entity mapping:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@Entity(name = "Post")
@Table(name = "post")
public class Post {
 
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
 
    private String title;
 
    public Post() {}
 
    public Post(String title) {
        this.title = title;
    }
}
When persisting 3 Post entities:
1
2
3
4
5
6
7
8
9
for int i = 1; i <= 3; i++ ) {
    entityManager.persist(
        new Post(
            String.format(
                "High-Performance Java Persistence, Part %d", i
            )
        )
    );
}
Hibernate would generate the following insert statements:
1
2
3
4
5
6
7
8
INSERT INTO post (title)
VALUES ('High-Performance Java Persistence, Part 1')
 
INSERT INTO post (title)
VALUES ('High-Performance Java Persistence, Part 2')
 
INSERT INTO post (title)
VALUES ('High-Performance Java Persistence, Part 3')
That’s great! Hibernate used the IDENTITY column to generate the entity identifier which is the only reasonable option for MySQL.

Hibernate 5

If you run the same unit test on Hibernate 5, you’ll get the following SQL statements:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
SELECT next_val as id_val
FROM hibernate_sequence FOR UPDATE
 
UPDATE hibernate_sequence
SET next_val= 2 where next_val=1
 
SELECT next_val as id_val
FROM hibernate_sequence FOR UPDATE
 
UPDATE hibernate_sequence
SET next_val= 3 where next_val=1
 
SELECT next_val as id_val
FROM hibernate_sequence FOR UPDATE
 
UPDATE hibernate_sequence
SET next_val= 4 where next_val=3
 
INSERT INTO post (title, id)
VALUES ('High-Performance Java Persistence, Part 1', 1)
 
INSERT INTO post (title, id)
VALUES ('High-Performance Java Persistence, Part 2', 2)
 
INSERT INTO post (title, id)
VALUES ('High-Performance Java Persistence, Part 3', 3)
What’s just happened? Well, Hibernate picks the TABLE generator instead of IDENTITY when the underlying database does not support sequences. However, TABLE generator is not a good choice. Check out the HHH-11014 Jira issue for more details related to this behavior change.

How to fix it?

The fix is extremely easy. You just need to use the native identifier instead:
1
2
3
4
5
6
7
8
9
10
@Id
@GeneratedValue(
    strategy= GenerationType.AUTO,
    generator="native"
)
@GenericGenerator(
    name = "native",
    strategy = "native"
)
private Long id;
Now, when running the previous test case, Hibernate uses the IDENTITY column instead:
1
2
3
4
5
6
7
8
INSERT INTO post (title)
VALUES ('High-Performance Java Persistence, Part 1')
 
INSERT INTO post (title)
VALUES ('High-Performance Java Persistence, Part 2')
 
INSERT INTO post (title)
VALUES ('High-Performance Java Persistence, Part 3')
If you want to use a portable solution that manages to customize the SEQUENCE generator while still allowing you to pick the IDENTITY generator for MySQL, then check out this article.

Source Link (Copied) https://vladmihalcea.com/why-should-not-use-the-auto-jpa-generationtype-with-mysql-and-hibernate/

Comments

Popular posts from this blog

Android & iOS Application Development For Dummies

App Development ProcessApp Development Process explained in the most simplified way This tutorial will guide all the beginners how an app is developed from scratch and will help in letting the beginners know how the process works.Phase-1 (Conceptualization): Even a concept or an idea starts with an approach to introduce something after acknowledging the inkling of amiss or what's missing in the existing market. Developing the aftermath ideas involves critical questioning and rational thinking towards the wire-framing stage. Phase-2 (Design): After analyzing the idea thoroughly and looking through all possible dimensions, comes the design part, where a feasible layout of the model is planned to move ahead for the further development processes. Phase-3 (Coding): Development process begins with designing a user-friendly UI. Prototypes of the model are prepared with the combined agreement of developers and designers to increase the efficiency and capitalization. The expedience checking r…

Amazon EC2 Server Setup & Installing JDK 8 and Tomcat 8, Running on Port 80 & 443 and Redirect Request from port 80 to 8080 and 443 to 8443

Amazon EC2 Server Setup & Installing JDK 8 and Tomcat 8, Running on Port 80 & 443 and Redirect Request from port 80 to 8080 and 443 to 8443.Step 1 : Log in to youraws account by following this link then click on my account and choose option aws management console.
Note: I am assuming you created your account with aws and you are ready with you account if you haven’t done then you can check out on google you will get many and it's a straight forward steps if you have still problem while creating an account you can comment in comment box i will also provide tutorial for that.
Once you logged in aws management console you are able to see window like this one


Note : Before we go ahead we have to select proper reason from right and side.I choose ohio region for this example.
Step 2 : Now you have to choose EC2 Server from Services tab on left side top corner then choose EC2 Services from “Compute option”

You will get window like this one and right now i have one instance is running for…
Why Do We Need Social Media Marketing For Our Business.
A long time ago when businesses wanted the market to expose their products or service to the public, the most viable options were print marketing or television and radio advertising. Websites were slowly started establishing their way into the mainstream for business, and people were without hesitantly boarding the internet train one-by-one. Fast forward to 2017 and the ways in which businesses can market to their customers have changed very tremendously! Websites for businesses are now more than mainstream, they’ve become a necessity for business purpose. Millions of customers were using search engines to find everything they need to know about a business before even making a purchase. Videos were the new shiny attention-getters and anyone who has a Twitter or Facebook account to keep up with their friends, acquaintances, and near and dear ones.
With all of these rapidly-made new advancements in technology, has opened a door not on…