Spring-Data-Jpa Repository – Underscore sul nome della colonna di entity framework

Sto usando spring-data-jpa su un progetto webmvc di spring. Sto affrontando un problema utilizzando la creazione di query su un repository di una delle mie entity framework. Qui sotto puoi vedere la mia quadro, il mio deposito e l’eccezione.

La mia quadro,

@Entity @Table(schema = "mainschema") @XmlRootElement public class Municipalperson implements Serializable { private static final long serialVersionUID = 1L; @Id @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) { this.id = id; this.municipal_id = municipal_id; this.firstname = firstname; } public Integer getId() { return id; } public void setId(Integer id) { this.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; } } 

il mio deposito,

 @Repository public interface MunicipalpersonRepository extends JpaRepository { List findByMunicipal_idOrderByLastnameDesc(int municipal_id); } 

e l’eccezione,

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

Ho provato a impostare mynicipal_id come int, poi come integer e lo stesso per il parametro ‘municipal_id’ sul mio repository, ma non hanno funzionato tutti. Inoltre, rinominare il repository in “findByMunicipalidOrderByLastnameDesc” e “findByMunicipalIdOrderByLastnameDesc”, ma non ha funzionato neanche.

Alla fine ho ribattezzato il municipal_id in municipalId (underscore removed) e rinominato anche getter / setter e il repository (findByMunicipalIdOrderByLastnameDesc) e il problema è stato risolto .

La mia domanda è perché questo sta accadendo?

Il carattere di sottolineatura _ è un carattere riservato nella derivazione della query Spring Data (vedere i documenti di riferimento per i dettagli) per consentire potenzialmente la descrizione del percorso della proprietà manuale. Quindi ci sono due opzioni che hai:

  1. Attenersi alle convenzioni di denominazione Java sull’uso del caso Camel per i nomi delle variabili membro e tutto funzionerà come previsto.
  2. Sfuggi al _ usando un trattino basso aggiuntivo, quindi rinomina il tuo metodo di ricerca per findByMunicipal__idOrderByLastnameDesc(…) .

Consiglierei il primo perché non alienerai i tuoi colleghi sviluppatori Java :).

Ho risolto questo errore rinominando il campo con il nome senza sottolineatura.

 @Column(name = "municipal_id", nullable = false) private Integer municipalId; // <-- field was renamed 

Aggiungi le seguenti proprietà al file application.properties :

 spring.jpa.hibernate.naming-strategy=org.hibernate.cfg.ImprovedNamingStrategy