2017-12-02 7 views
0

ユーザーはムービータイトルをリストに追加できるアプリケーションがあります。現在、私はリストを返すために、このコードを使用します。userIdを使用してオブジェクトのリストを作成する

@Override 
public List<Movie> getAllmovies() { 

    List<Movie> movies = new ArrayList<Movie>(); 
    Iterator<Movie> iterator = movieRepository.findAll().iterator(); 
    while (iterator.hasNext()) { 
     movies.add(iterator.next()); 
    } 

    return movies; 
} 

あなたが期待するように、これは現在のユーザーからのすべての映画ではなく映画を返します。

@Override 
public List<Movie> getAllmovies() { 

    User current_user = userService.getUser(); 
    List<Movie> movies = new ArrayList<Movie>(); 
    movies = movieRepository.findAllByUserId(current_user.getId()); 

    return movies; 
} 
そして私は、私のMovieRepositoryのメソッドを追加しました::だから私が代わりに findAll()findAllByUserId()を使用するようにコードに変更

:私はエラーを取得するコードをコンパイルするとき

@Repository 
public interface MovieRepository extends JpaRepository<Movie, Serializable> { 
    List<Movie> findAllByUserId(Long userId); 
} 

しかし、今を

Caused by: org.springframework.data.mapping.PropertyReferenceException: No property userId found for type Movie! Did you mean 'users'?

このエラーはどこから発生しますか? MovieRepositoryの引数はuserIdではありません。

//編集。ちょっとばかげた後、私はuserIdfindAllByUserId()メソッドに関連していることを理解しました。そのため、エラーはuserIdを使用できないことを意味します。これは、Movie型のプロパティではないためです。だから私はどのようにユーザーIDでムービーのリストを返すのですか?

//編集。作品のモデルを追加しました:

package com.movieseat.models; 

import com.movieseat.model.security.User; 
import java.util.HashSet; 
import java.util.Set; 
import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.ManyToMany; 
import javax.persistence.Table; 

@Entity(name = "Movie") 
@Table(name = "movie") 
public class Movie { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    @Column(name = "id") 
    private Integer id; 

    private String name; 

    public Movie(){} 

    public Movie(String name) { 
     this.name = name; 
    } 

    public Movie(Integer id, String name) { 
     this.id = id; 
     this.name = name; 
    } 

    public Movie(String name, Set<User> users){ 
     this.name = name; 
     this.users = users; 
    }  

    @ManyToMany(mappedBy = "movies") 
    private Set<User> users = new HashSet<>(); 

    public Set<User> getUsers() { 
     return users; 
    } 

    public void setUsers(Set<User> users) { 
     this.users = users; 
    } 

    public Integer getId() { 
     return id; 
    } 

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

    public String getName() { 
     return name; 
    } 

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

    @Override 
    public String toString(){ 
     return "id: " + id + "name: " + name; 
    } 

} 
+0

に変換されます署名は、あなたの 'Movie'モデルをしてください含めることはできますか?また、SQLのログ記録を有効にして、実行されているSQLを確認しようとしましたか? 'logging.level.org.hibernate.SQL = debug' – timothyclifford

+0

私はMovieモデルを追加しました。私はSQLが実行されるのを見るでしょう。 movieはuserIdプロパティを持っていません。なぜなら、これは映画とは関係がないからです。 –

答えて

1

次のメソッドのシグネチャは、あなたがしたいしたいでしょう:これは春データJPAのプロパティ式の機能を使用している

List<Movie> findByUsers_Id(Long id) 

。 Users_IdはJPQL x.users.id

More info here

+0

だからまだ近い。トリックをやったことを歓声。今すぐ情報を読んでください! –

+0

聞いてよかったら、それがうまくいけば答えを受け入れてください;)haha – timothyclifford

+0

リマインダーありがとう。 –

関連する問題