属性名称包含特殊词的 Spring Data JPA 存储库方法

Kal*_*asa 2 java spring-data-jpa

例如,我有一个具有以下属性的实体:

@Entity
public class MyObj {
    public String nameOrId;
}
Run Code Online (Sandbox Code Playgroud)

然后我继续创建存储库

public interface MyObjRepository extends JpaRepository<MyObj, String> {
    MyObj findByNameOrId(String nameOrId);
}
Run Code Online (Sandbox Code Playgroud)

这失败了,因为 Spring 似乎将方法名称标记为findBy Name Or Id,而不是findBy nameOrId

由此产生的错误是“名称”属性未找到(或类似)。

有没有办法转义方法语法中的特殊词(“Or”、“And”等)?重命名列以不包含这些词不是一种选择。

Kal*_*asa 6

一种解决方法是重命名 Java 字段以避免使用特殊词,同时使用@Column注释保留列名。

@Column(name = "nameOrId")
public String nameId;
Run Code Online (Sandbox Code Playgroud)

JPA 方法被相应地重命名。

MyObj findByNameId(String nameOrId);
Run Code Online (Sandbox Code Playgroud)