java - 如何在 Spring-data JPA 的名称中使用下划线 "_"映射类属性

标签 java spring hibernate jpa spring-data-jpa

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

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 不带下划线,我不会得到错误,但如果我这样做,以后就不容易阅读了。这是我具有表属性的类:

@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);

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

关于java - 如何在 Spring-data JPA 的名称中使用下划线 "_"映射类属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25856785/

相关文章:

spring - 在Grails中注销时如何清除Spring Security的RememberMe cookie

java - 使用 Java 和 Hibernate 中的多个表检索 POJO 查询

java - 如何在 Hibernate 中存储添加到数据库的每个实体的副本

java - 在 Eclipse 中的 tomcat 上使用 Struts 运行 Web 应用程序时出现 404 错误

java - 执行操作时更改图像

java - spring 3 带文件上传的自动表单字段验证

java - spring 如何在开发中使用内存数据库,在生产中使用普通数据库?

java - 在 android studio 和 SignalR 中接收 List<Object>

java - 用 Espresso 测试 recyclerView,如何执行点击或断言

java - Hibernate org.hibernate.MappingException ...关联..未映射的类- Manytomany