1

On running my springboot application hibernate is creating new columns. Below is my entity class

@Entity
@Table(name="contst_games")
public class ContestGames {

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="id")
    private int id;

    @Column(name="cntstName")
    private String contestName;

    @Column(name="cntstType")
    private String contestType;

    @Column(name="phne")
    private int phoneNumbr;

    // getters and setters

    @Override
    public String toString() {
        return "ContestGames [id=" + id + ", contestName=" + contestName + ", contestType=" + contestType + "]";
    }

}

Below is the setup of properties

# ==========================================================================
# = JPA / HIBERNATE
# ==========================================================================
spring.jpa.database-platform = org.hibernate.dialect.MySQL5Dialect
spring.jpa.show-sql = true

#60 sec
spring.datasource.hikari.connection-timeout=60000
# max 5
spring.datasource.hikari.maximum-pool-size=5
spring.jpa.hibernate.ddl-auto=update
#============================================================================

Below is the newly created table

'id', 'int(11)', 'NO', 'PRI', NULL, 'auto_increment'
'cntstName', 'varchar(255)', 'YES', '', NULL, ''
'cntstType', 'varchar(255)', 'YES', '', NULL, ''
'phne', 'int(11)', 'YES', '', NULL, ''
'cntst_name', 'varchar(255)', 'YES', '', NULL, ''
'cntst_type', 'varchar(255)', 'YES', '', NULL, ''

Below is the alter query that is being run on running the application.

2019-11-28 13:09:23.092  INFO 10615 --- [           main] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [name: default]
2019-11-28 13:09:23.158  INFO 10615 --- [           main] org.hibernate.Version                    : HHH000412: Hibernate Core {5.4.8.Final}
2019-11-28 13:09:23.344  INFO 10615 --- [           main] o.hibernate.annotations.common.Version   : HCANN000001: Hibernate Commons Annotations {5.1.0.Final}
2019-11-28 13:09:23.446  INFO 10615 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2019-11-28 13:09:23.450  WARN 10615 --- [           main] com.zaxxer.hikari.util.DriverDataSource  : Registered driver with driverClassName=com.mysql.jdbc.Driver was not found, trying direct instantiation.
2019-11-28 13:09:23.669  INFO 10615 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
2019-11-28 13:09:23.688  INFO 10615 --- [           main] org.hibernate.dialect.Dialect            : HHH000400: Using dialect: org.hibernate.dialect.MySQL5Dialect
Hibernate: alter table contst_games add column cntst_name varchar(255)
Hibernate: alter table contst_games add column cntst_type varchar(255)
2019-11-28 13:09:24.867  INFO 10615 --- [           main] o.h.e.t.j.p.i.JtaPlatformInitiator       : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
2019-11-28 13:09:24.891  INFO 10615 --- [           main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
2019-11-28 13:09:25.482  WARN 10615 --- [           main] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning

Two new columns cntst_name and cntst_type are being created at runtime. Ideally no new column should be added since the table already exists and spring.jpa.hibernate.ddl-auto=update. Also to be noted no new column for phone number is being created.

3
  • Where is your question please ? I didn't see any ? question mark in your description ;) Commented Nov 28, 2019 at 12:04
  • Try adding spring.datasource.driverClassName=com.mysql.jdbc.Driver in your application.properties file. Commented Nov 28, 2019 at 12:09
  • It is already added in the application properties. Commented Nov 28, 2019 at 13:23

2 Answers 2

1

That's because of Hibernate&Spring Boot Naming Strategies. (more info: https://www.jpa-buddy.com/blog/hibernate-naming-strategies-jpa-specification-vs-springboot-opinionation)

So, the right way is to name your columns strictly in a snake_case, NOT camelCase or PascalCase.

Sign up to request clarification or add additional context in comments.

Comments

0

if you compare :

'cntstName', 'varchar(255)', 'YES', '', NULL, ''

'cntstType', 'varchar(255)', 'YES', '', NULL, ''

with :

'cntst_name', 'varchar(255)', 'YES', '', NULL, ''

'cntst_type', 'varchar(255)', 'YES', '', NULL, ''

you recognize that the uppercase is the problem, you should made all fields with lowercase.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.