Reputation: 3899
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> {}
Upvotes: 41
Views: 57893
Reputation: 782
use below in application.properties
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
Upvotes: 4
Reputation: 257
@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
Upvotes: 10
Reputation: 2694
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
Upvotes: 58
Reputation: 3519
As described in spring-boot-jpa-column-name-annotation-ignored, your column name is being converted to snake case.
Possible solutions:
Upvotes: 31