query mkyong example data java jpa repository entity spring-data

java - mkyong - Repositorio Spring-Data-Jpa: subrayar en el nombre de la columna de la entidad



spring repository (2)

Estoy usando spring-data-jpa en un proyecto webmvc de primavera. Estoy enfrentando un problema usando la creación de consultas en un repositorio de una de mis entidades. A continuación puede ver mi Entidad, mi Repositorio y la Excepción.

Mi Entidad,

@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; } }

mi repositorio,

@Repository public interface MunicipalpersonRepository extends JpaRepository<Municipalperson, Integer> { List<Municipalperson> findByMunicipal_idOrderByLastnameDesc(int municipal_id); }

y la excepción,

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!

Traté de establecer my_icipal_id como int, luego como Integer y lo mismo para el parámetro ''municipal_id'' en mi repositorio, pero no funcionó. Además, cambie el nombre del Repositorio a ''findByMunicipalidOrderByLastnameDesc'' y ''findByMunicipalIdOrderByLastnameDesc'', pero no funcionó.

Finalmente cambié el nombre del municipal_id al municipalId (subrayado eliminado) y también cambié el nombre de getters / setters y el repositorio (findByMunicipalIdOrderByLastnameDesc) y el problema fue resuelto .

Mi pregunta es por qué está pasando esto?


El guión bajo _ es un carácter reservado en la derivación de consulta de Spring Data (ver los documentos de referencia para más detalles) para permitir potencialmente la descripción de la ruta de propiedad manual. Entonces hay dos opciones que tienes:

  1. Siga las convenciones de nomenclatura de Java de usar camel-case para los nombres de las variables miembro y todo funcionará como se espera.
  2. Escape el _ utilizando un guión bajo adicional, es decir, cambie el nombre de su método de consulta para findByMunicipal__idOrderByLastnameDesc(…) .

Recomiendo lo primero, ya que no vas a alejar a otros desarrolladores de Java :).


Resolví este error cambiando el nombre del campo por el nombre sin guion bajo.

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