George Siggouroglou George Siggouroglou - 1 year ago 196
Java Question

Spring-Data-Jpa Repository - Underscore on Entity Column Name

I am using spring-data-jpa on a spring webmvc project. I am facing an issue using query creation on a Repository of one of my Entities. Below you can see my Entity, my Repository and the Exception.

My Entity,

@Table(schema = "mainschema")
public class Municipalperson implements Serializable {

private static final long serialVersionUID = 1L;
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(nullable = false)
private Integer id;

@Basic(optional = false)
@Column(name = "municipal_id", nullable = false)
private Integer municipal_id;

@Basic(optional = false)
@Column(nullable = false, length = 60)
private String firstname;

public Municipalperson(Integer id, Integer municipal_id, String firstname) { = id;
this.municipal_id = municipal_id;
this.firstname = firstname;

public Integer getId() {
return id;

public void setId(Integer id) { = id;

public Integer getMunicipal_id() {
return municipal_id;

public void setMunicipal_id(Integer municipal_id) {
this.municipal_id = municipal_id;

public String getFirstname() {
return firstname;

public void setFirstname(String firstname) {
this.firstname = firstname;

my Repository,

public interface MunicipalpersonRepository extends JpaRepository<Municipalperson, Integer> {

List<Municipalperson> findByMunicipal_idOrderByLastnameDesc(int municipal_id);

and the exception,

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'municipalpersonRepository': Invocation of init method failed; nested exception is No property municipal found for type Municipalperson!

I tried to set mynicipal_id as int, then as Integer and the same for the parameter 'municipal_id' on my Repository, but they all didn't worked. Also, i rename the Repository to 'findByMunicipalidOrderByLastnameDesc' and 'findByMunicipalIdOrderByLastnameDesc' but it didn't worked neither.

Finally i renamed the municipal_id to municipalId (underscore removed) and also rename getters/setters and the Repository (findByMunicipalIdOrderByLastnameDesc) and the issue solved.

My question is why this is happening?

Answer Source

The underscore _ is a reserved character in Spring Data query derivation (see the reference docs for details) to potentially allow manual property path description. So there are two options you have:

  1. Stick to the Java naming conventions of using camel-case for member variable names and everything will work as expected.
  2. Escape the _ by using an additional underscore, i.e. rename your query method to findByMunicipal__idOrderByLastnameDesc(…).

I'd recommend the former as you're not going to alienate fellow Java developers :).

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download