使用 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
如果没有下划线,我不会收到错误,但如果我这样做,以后就不容易阅读了。这是我具有表属性的类:
@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);
您可以找到许多解释如何编写自定义查询的教程和网站。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)