Spring-Data-JPA Repository-подчеркивание имени столбца сущности

Я использую spring-data-jpa в проекте spring webmvc. Я столкнулся с проблемой, используя создание запроса в репозитории одного из моих сущностей. Ниже вы можете увидеть мою сущность, мой репозиторий и исключение.

Мое Лицо,

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

мой репозиторий,

@Repository
public interface MunicipalpersonRepository extends JpaRepository<Municipalperson, Integer> {

    List<Municipalperson> findByMunicipal_idOrderByLastnameDesc(int municipal_id);
}

и исключения

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!  

Я попытался установить mynicipal_id как int, затем как целое число и то же самое для параметра 'municipal_id' в моем репозитории, но все они не работали. Кроме того, я переименовываю репозиторий в "findByMunicipalidOrderByLastnamedesc" и "findByMunicipalIdOrderByLastnamedesc", но это тоже не сработало.

наконец-то я переименован municipal_id в municipalId (подчеркивание удалено), а также переименовать геттеры/сеттеры и репозиторий (findByMunicipalIdOrderByLastnamedesc) и проблема решена.

мой вопрос в том, почему это происходит?

3 ответов


подчеркивание _ является зарезервированным символом в выводе запроса данных Spring (см. справочные документы for details), чтобы потенциально разрешить ручное описание пути к свойству. Таким образом, у вас есть два варианта:

  1. придерживайтесь соглашений об именах Java использования верблюд-дело для имен переменных-членов и все будет работать так, как ожидалось.
  2. побег _ с помощью дополнительного подчеркивания, т. е. переименовать свой метод запроса к findByMunicipal__idOrderByLastnameDesc(…).

Я бы рекомендовал первое, поскольку вы не собираетесь отчуждать других разработчиков Java:).


Я решил эту ошибку, переименовав поле в имя без подчеркивания.

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

пожалуйста, добавьте следующие свойства приложение.свойства:

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