当前位置: 首页 > 知识库问答 >
问题:

如何在 Spring-data JPA 中映射名称中名称中带有下划线“_”的类属性

叶嘉颖
2023-03-14

带有Spring-Data的JPA对名称中带有下划线“_”的属性有问题吗?这是我扩展JpaRepository的接口:

public interface I_My_Class extends JpaRepository<MyClass, Long> {

    public MyClass findByA_my_table_id (Long headerId);
}

这一行:<code>findByA_my_table_id(长头id) 给出此错误:

无效的派生查询!没有为类型 MyClass 找到属性“a”!

如果我将方法命名为< code > public my class find bya _ my _ table _ id(Long header id);它给我同样的错误。如果我将属性命名为< code>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
}       

共有1个答案

陆正德
2023-03-14

是的,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);

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

 类似资料:
  • 问题内容: 尝试反序列化此JSON: 我的课: 我猜因为它在我的班级中具有cumulative_stats变量名称,所以不会反序列化accurate-stats,如何用破折号反序列化那个东西? 问题答案: 一种替代方法是使用DataContractJsonSerializer而不是JavascriptSerializer。 如果您这样声明类: 您可以像这样反序列化: 将产生:

  • 我将php中的Symfony与此捆绑包一起使用:https://github.com/hslavich/OneloginSamlBundle 使用onelogin php saml工具包:https://github.com/onelogin/php-saml 身份验证时我的IDP返回需要从oid映射到友好名称的属性 如果我在symfony bundles配置中使用oid名称,并且没有友好的名称,

  • 我想在Spring Boot应用程序中设置。我想使用环境变量来设置它。 Spring Boot相当方便地将所有环境变量从转换为Spring上下文中称为的属性。 如何在Spring Boot中使用环境变量设置目标名称中有下划线的属性?大概会被翻译成?

  • 问题内容: 我定义了以下实体: 尽管有表注释,我仍然收到。如何防止将诸如EmailTemplate之类的实体类转换为email_template表名? 编辑: 我正在使用Spring Boot:启动JPA。在我的build.gradle文件中 问题答案: Spring默认使用带下划线的驼峰案例名称分割。尝试在中设置。

  • 我面临Elasticsearch结果的问题,该结果在属性名称中使用@。json结果片段: {“\u index”:“logs-2015.12.31”,“\u type”:“log”,“\u id”:“AVH4eA4QKV0mbJuiIHO1”,“\u score”:null,“\u source”:{“@timestamp”:“2015-12-31T14:36:35.378Z”,“beat”:{“

  • 问题内容: JavaScript中的下划线前缀仅是约定,例如Python私有类方法中的约定吗? 从2.7 Python文档中: Python中不存在只能从对象内部访问的“私有”实例变量。但是,大多数Python代码遵循一个约定:以下划线开头的名称(例如_spam)应被视为API的非公开部分(无论是函数,方法还是数据成员) 。 这也适用于JavaScript吗? 以下面的JavaScript代码为例