当前位置: 首页 > 面试题库 >

Spring-Data-Jpa存储库-实体列名称下划线

濮俊美
2023-03-14
问题内容

我在spring webmvc项目上使用spring-data-
jpa。我在一个实体的存储库上使用查询创建时遇到问题。在下面,您可以看到我的实体,我的存储库和异常。

我的实体:

@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!

我试图将municipal_idIntory上Integer的参数设置为int,然后设置为和municipal_id,但是都没有设置。另外,我将存储库重命名为findByMunicipalidOrderByLastnameDescfindByMunicipalIdOrderByLastnameDesc但也没有用。

最后,我 改名municipal_idmunicipalId(下划线删除),也改名为getter /
setter方法和存储库(findByMunicipalIdOrderByLastnameDesc),并 在问题得到解决

我的问题是为什么会这样?


问题答案:

下划线_是Spring Data查询派生中的保留字符(有关详细信息,请参见参考文档),以潜在地允许手动描述属性路径。因此,您有两种选择:

  1. 坚持使用Java命名约定,即使用驼峰式大小写作为成员变量名称,一切都会按预期进行。
  2. _使用其他下划线来转义,即将查询方法重命名为findByMunicipal__idOrderByLastnameDesc(…)

我建议使用前者,因为您不会疏远其他Java开发人员:)。



 类似资料:
  • 我在一个spring webmvc项目上使用spring-data-jpa。我在使用我的一个实体的存储库创建查询时遇到了一个问题。下面您可以看到我的实体、我的存储库和异常。 我的实体: 我的存储库: 而例外, 最后,我将重命名为(删除下划线),并重命名getters/setters和存储库(),问题得到解决。 我的问题是为什么会发生这种情况?

  • 我在使用JPA时遇到了一些困难。我没有得到任何异常,但我不能保存任何东西到数据库。我从Hibernate到Jpa,在那里一切都工作得很好。下面是我的文件 Application.Properties: 存储库: 服务: 我在提交表单时得到了200的响应,但在数据库中找不到数据

  • 我有一个简单的类客户端: ,clientrepository: ,ClientrepositoryCustom: 我在选择名字方面有哪一级的自由?这可能吗?是否有一个触发词,如果我想要一个与我实体的属性无关的名称,我必须使用它? 如果我查询两个属性。似乎我可以编写类似这样的方法,但我不希望有一个带有与方法名无关的附加参数的方法。 提前感谢,任何反馈都很感激!

  • 我希望像查询NodeEntity一样查询RelationshipEntity。 软件包信息: 此存储库不工作。 getEmployeeWorkingOnProject(String,String)返回NULL 我在关键字之后进行了修改,例如将其从修改为像这样的别名,并且还尝试更改了返回中别名的顺序。 我希望获得与特定员工和特定项目相关联的所有状态(边缘)。 或 或其他类型的类似结果,其中关系实体持

  • 一:如果我跨多个实体执行操作,该怎么办:我使用哪个存储库?第二:Spring Data Jpa是否允许没有任何类型参数的存储库?

  • 我创建了一个基本的Spring MVC / JPA / Hibernate应用程序。我试图保存一个UserProfile实体来测试我是否真的可以持久化它,但是什么也没有保存,也没有抛出异常。 在控制器方法中,我创建了一个简单的UserProfile(这是一个@Entity),并将其发送到服务方法。类使用 @Service 对类进行批注,并使用 @Transactional 对 addUserPro