带有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
}
答案 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);
您可以找到许多解释如何编写自定义查询的教程和网站。