存储库查询和实体实例变量名称

时间:2016-12-29 07:57:53

标签: java spring hibernate spring-boot spring-data-jpa

我正在尝试使用Spring Repository类中的方法:

import javax.persistence.Column;

@Entity
@Table(name = "Tool")
public
class
Tool implements Serializable
{
    @Column(name = "number")    protected Integer   mNumber;

    public Integer  getNumber()                 { return mNumber; }
    protected void  setNumber(Integer inVal)    { mNumber = inVal; }
}

使用这样定义的Entity列。请注意,虽然我明确地将列命名为“number”,但Spring(或Hibernate)会看到实际的成员变量名称“mNumber”,并且无法生成正确的查询。

1.4.3.RELEASE

是否有注释来指定Spring在解释查询时应使用的名称?

此代码使用spring-boot <!doctype html> <html> <head> <meta charset="utf-8"> <title>Demo</title> </head> <body> <a href="http://jquery.com/">jQuery</a> <script src="jquery.js"></script> <script> // Your code goes here. </script> </body> </html> 构建,我正在使用Postgres。

1 个答案:

答案 0 :(得分:3)

将findBy更改为以下内容:

public interface ToolRepository extends Repository<Tool, Long>
{
    public Tool findByMNumber(String mNumber);
}

如果更改参数名称,则需要使用@Param注释并指定属性名称。

参考: https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.query-methods.query-creation

如果您不想更改方法名称,请使用@Query注释:

public interface ToolRepository extends Repository<Tool, Long>
{
    @Query("from Tool where mNumber = :number")
    public Tool findByNumber(String number);
}

如果需要,为mNumber生成getter和setter。您可以通过IDE生成它。