java - Spring JPA 中方法名称中支持的关键字

标签 java spring hibernate jpa spring-data-jpa

如何编写以下查询的方法名称:

@Query("SELECT r.skill, r.rating, count(r) FROM AssociateRating r "
    + "where updatedTime = ( select max(updatedTime) from AssociateRating a "
    + "where r.associate = a.associate ) GROUP BY r.skill, r.rating")
List<Object[]> findCountMostRecent();

请在下面找到型号:

@Entity
@Table(name = "associate_ratings")
public class AssociateRating {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;

    private String associate;

    @ManyToOne
    @JoinColumn(name = "skill_id")
    private Skill skill;

    private int rating;

    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "updated_time")
    private Date updatedTime;


    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getAssociate() {
        return associate;
    }

    public void setAssociate(String associate) {
        this.associate = associate;
    }

    public Skill getSkill() {
        return skill;
    }

    public void setSkill(Skill skill) {
        this.skill = skill;
    }
    public int getRating() {
        return rating;
    }

    public void setRating(int rating) {
        this.rating = rating;
    }

    public Date getUpdatedTime() {
        return updatedTime;
    }

    public void setUpdatedTime(Date updatedTime) {
        this.updatedTime = updatedTime;
    }
}


/**
 * Skill Model
 */
@Entity
@Table(name = "skills")
public class Skill {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;

    private String name;

     public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

尝试从 Associate_Ratings 中提取记录时出现异常 com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:“where 子句”中的未知列“updatedTime”

您能告诉我这里出了什么问题吗? 您能否告诉我在这种情况下我们如何命名 Spring JPA findXX 方法?

最佳答案

事实上,您的表格中没有“updatedTime”列。

列名称为“updated_time”,如 @Entity UpdatedTime 变量中所示。

现在,如果您想使用 JPA 关键字创建方法名称,我想这在您的查询中是不可能的,原因如下:

  • 您无法选择特定列(r.skill、r. rating、count(r)),但您应该选择全部列。
  • 不能有嵌套查询。
  • 没有 GroupBy 关键字

您可以在这里找到所有 JPA 支持的关键字:2.3 Query methods

因此,就您而言,您应该采用 @Query 方法。

关于java - Spring JPA 中方法名称中支持的关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37025181/

相关文章:

java - 在当前项目和插件组中未找到前缀 'jetty' 的插件

java - 404 - 请求的资源不可用

java - 第一次持久化之前的 Hibernate 回调

java - 使用 Tomcat 8 在 Hibernate 4.3.6 中“无法查找 JNDI 名称”

java - spring security - 动态角色

java - Uberjar 通过 eclipse ?

java - 可以创建全局数组吗?

java - 如何在 Freemarker 列表之间获取逗号

java - 与 Guice 0 耦合获取多个新实例

java - Spring - 使用 new 是一种不好的做法吗?