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