JPA column with incorrect underscore
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
KenavR
Updated on February 14, 2020Comments
-
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 returnsUnknown column 'program0_.program_id' in 'field list'
The error message is correct
program_id
is unknown because the real name isprogramId
.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 thefindAll()
query.@Repository public interface ProgramRepository extends JpaRepository<Program, Long> {}