【发布时间】:2016-12-03 23:19:18
【问题描述】:
我正在尝试选择与给定用户关联的最新添加的锻炼组。
用户有会话,会话有集合。我的实体定义如下。
@Entity(name = "users") // Postgres doesn't like the table name "user"
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@OneToMany(mappedBy = "user")
private Set<Session> sessions;
...
@Entity
public class Session {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@ManyToOne
private User user;
@OneToMany(mappedBy = "session")
private Set<WorkoutSet> sets;
...
@Entity
public class WorkoutSet {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@OneToOne
private User user;
@ManyToOne
private Session session;
private LocalDateTime timestamp = LocalDateTime.now();
...
下面的 sql 查询似乎可以解决问题
select w
from workout_set w
inner join session s
on w.session_id = s.id
where s.user_id = 1
order by w.timestamp DESC
limit 1
但是当我试图做类似下面的事情时
@Repository
public interface WorkoutSetRepository extends CrudRepository<WorkoutSet, Long> {
@Query("select w from WorkoutSet w inner join Session s on w.session_id = s.id where s.user = :user order by w.timestamp")
List<WorkoutSet> findLastSet(User user, Pageable limit);
我明白了……
org.springframework.data.mapping.PropertyReferenceException: No property user found for type WorkoutSet!
关于如何正确进行查询的任何线索?我也对替代方法持开放态度,因为如果可能的话,我宁愿避免编写 jpql。
【问题讨论】:
标签: spring jpa spring-data jpql