编程语言
首页 > 编程语言> > java-如何在Spring-data JPA中使用名称中带有下划线“ _”的类属性进行映射

java-如何在Spring-data JPA中使用名称中带有下划线“ _”的类属性进行映射

作者:互联网

使用Spring-Data的JPA是否在名称中带有下划线“ _”的属性有问题?这是扩展JpaRepository的接口:

public interface I_My_Class extends JpaRepository<MyClass, Long> {

    public MyClass findByA_my_table_id (Long headerId);
}

这行:findByA_my_table_id(Long headerId);给出此错误:

Invalid derived query! No property “a” found for type MyClass !

如果我将方法命名为public MyClass findBya_my_table_id(Long headerId);它给了我同样的错误.如果我将属性amytableid命名为不带下划线,则不会出现错误,但如果这样做,以后将很难读取.这是我具有table属性的类:

@Entity
@Table(name="MyTable")
public class MyClass implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @Column (name="MY_TABLE_ID", nullable=false)
    private Long a_my_table_id; // <-- this is the attribute that I try to put in the named query
}       

解决方法:

是的,Spring Data的实体属性名称中的下划线会出现问题.原因是JpaRepository只是希望属性具有正确的Java标准命名约定,例如,属性名称应为小写. (如果您可以添加多个名词以使其更完整,则最好将大写的名词的首字母(第一个字母除外))

String aMyTableId;

以上属性将创建,告诉JpaRepository创建类似

List<MyClass> findByAMyTableId(String aMyTableId);

这不会产生编译错误.

如果您要编写自定义查询,则可以使用@Query API.在这里您可以编写面向对象的查询.

@Query("Select myclass from MyClass myclass where myclass.aMyTableId=?1 and myclass.activeFlag='1'")
List<MyClass> findByAMyTableIdWithActiveFlagOn(String aMyTableId);

您可以找到许多教程和网站,其中介绍了如何编写自定义查询.

标签:spring-data-jpa,jpa,hibernate,spring,java
来源: https://codeday.me/bug/20191121/2050446.html