如何用下划线映射类属性" _"在Spring-data JPA中他们的名字

时间:2014-09-15 20:57:28

标签: java spring hibernate jpa 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);出现此错误:

  

无效的派生查询!找不到类型MyClass的属性“a”。

如果我将方法命名为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
}       

1 个答案:

答案 0 :(得分:3)

是Spring Data会在Entity属性名称中出现下划线问题。原因是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);

您可以找到许多解释如何编写自定义查询的教程和网站。