JPA column with incorrect underscore

43,198

Solution 1

As described in spring-boot-jpa-column-name-annotation-ignored, your column name is being converted to snake case.

Possible solutions:

  • Setup a Naming Strategy
  • Use lowercase column names in your annotations

Solution 2

http://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html

spring.jpa.hibernate.naming.strategy is not a supported property for Spring JPA implementation using Hibernate 5.

Use the below property in application.properties

spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

Solution 3

Were able to map

@Column(name = "PersonFullName")

private String PersonFullName;


to the database table column name "PersonFullName" without the underscore.

The below worked for me. Add this in the application settings and then use @Column to specify the physical database column name for the model's property.

@Column(name = "PersonFullName")

In Application.properties

spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

Solution 4

use below in application.properties

spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

Share:
43,198
KenavR
Author by

KenavR

Updated on February 14, 2020

Comments

  • KenavR
    KenavR over 4 years

    I use JPA for database access and annotated every column with the correct name. Now if I execute a query (e.g. findAll()) it returns

    Unknown column 'program0_.program_id' in 'field list'
    

    The error message is correct program_id is unknown because the real name is programId.

    Models: Program

      @Entity
      @Table(name = "programs")
      @XmlRootElement
      public class Program implements Serializable {
              @Id
              @GeneratedValue(strategy = GenerationType.IDENTITY)
              @Basic(optional = false)
              @Column(name = "programId")
              private Long programId;
              @ManyToMany
              @JoinTable(
                      name = "programlabels",
                      joinColumns = {
                        @JoinColumn(name = "program", referencedColumnName = "programId")},
                      inverseJoinColumns = {
                        @JoinColumn(name = "label", referencedColumnName = "labelId")})
              private Collection<Label> labels;
            }
    

    Label

    @Entity
    @Table(name = "labels")
    @XmlRootElement
    public class Label implements Serializable {
      @Id
      @Basic(optional = false)
      @NotNull
      @Size(min = 1, max = 100)
      @Column(name = "labelId")
      private String labelId;  
    }
    

    Query

    select program0_.program_id as program_1_5_, ...
    

    Is there a reason why JPA changes "programId" to "program_id" or am I missing any configuration?

    thanks

    Edit: Oh sorry forgot to add query code/information.

    I use the Spring Data's JpaRepository interface and tried the findAll() query.

    @Repository
    public interface ProgramRepository extends JpaRepository<Program, Long> {}