Sto usando spring-data-jpa su un progetto webmvc di primavera. Sto affrontando un problema utilizzando query creation su un repository di una delle mie entità. Qui sotto puoi vedere la mia entità, il mio deposito e l'eccezione.Spring-Data-Jpa Repository - Underscore sul nome della colonna Entity
mia entità,
@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;
}
}
mio repository,
@Repository
public interface MunicipalpersonRepository extends JpaRepository<Municipalperson, Integer> {
List<Municipalperson> 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 cercato di impostare mynicipal_id come int, poi come Integer e lo stesso per il parametro 'municipal_id' sul mio repository, ma non tutti hanno funzionato. Inoltre, rinominare il repository in "findByMunicipalidOrderByLastnameDesc" e "findByMunicipalIdOrderByLastnameDesc", ma non ha funzionato neanche.
Infine i rinominato il municipal_id a municipalId (sottolineatura rimosso) e anche rinomina getter/setter e Repository (findByMunicipalIdOrderByLastnameDesc) e il problema risolto.
La mia domanda è perché questo sta accadendo?
Spring Data JPA fa molto affidamento sulle convenzioni di denominazione Java. Hai scelto di non rispettarli avendo un trattino basso nel tuo campo e i nomi degli utenti. Ecco perché sei stato morso. Rispetta le convenzioni sui nomi Java e JPA di Spring Data sarà felice e il tuo codice sarà più leggibile come bonus. Non che la colonna possa essere nominata come vuoi, anche con caratteri di sottolineatura. Ciò che conta sono i nomi dei campi associati. –
Grazie mille per il tuo commento. Non conoscevo le convenzioni di denominazione java. Ho trovato anche questa [domanda di stackoverflow] (http://stackoverflow.com/questions/150192/using-underscores-in-java-variables-and-method-names) che mi ha aiutato. –