如何编写以下查询的方法名称:
@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/