2016-12-03 7 views
0

特定のユーザーに関連付けられている最近追加されたトレーニングセットを選択しようとしています。ユーザーが設定した最新のトレーニングを選択する

ユーザーにはセッションとセッションがあります。私のエンティティは以下のように定義されています。

  @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を書くのをやめてしまうので、私は別の方法にもとてもオープンです。

答えて

1

これを試してみてください:

@Repository 
public interface WorkoutSetRepository extends CrudRepository<WorkoutSet, Long> { 
    @Query("select w from WorkoutSet w inner join w.session s where s.user = :user order by w.timestamp") 
    List<WorkoutSet> findLastSet(@Param("user") TestUser user); 
} 

は、JOIN句の違いに注意してください。これは、hibernate 5.0.11で動作します。

関連する問題