2017-06-11 1 views
0

私は2つのテーブルすなわちユーザーとイベントを持っています。新しいユーザーがサインアップすると、Usersテーブルが入力されます。後で同じユーザーがカレンダーイベントを作成できます。イベントテーブルがいっぱいになり、users_eventsはユーザーに基づいてイベントのマッピングを保持します。 ログインしたuserIdに基づいてすべてのイベントを検索したいと思います。ここではクエリですが、それに基づいてデータを返します。 select * from eventsここで、eventidは(user_eventからeventIdを選択します。id_user = xです)。ここに私のユーザーとイベントエンティティクラスがあります。springbootでCrudRepositoryを使用してinverseColumnデータに基づいてデータを取得する方法は?

User.java

@Entity 
    @Table(name = "users") 
    public class User { 

@Id 
@GenericGenerator(name = "generator", strategy = "increment") 
@GeneratedValue(generator = "generator") 
@Column(name = "id", nullable = false) 
private Long id; 

@Column(name = "first_name", nullable = false) 
private String firstName; 

@Column(name = "family_name", nullable = false) 
private String familyName; 

@Column(name = "e_mail", nullable = false) 
private String email; 

@Column(name = "phone", nullable = false) 
private String phone; 

@Column(name = "language", nullable = false) 
private String language; 

@Column(name = "id_picture") 
private String pictureId; 

@Column(name = "login", nullable = false) 
private String login; 

@Column(name = "password", nullable = false) 
private String password; 

@Column(name = "birth_date") 
private Date birthDate; 

@Column(name = "enabled") 
private Boolean enabled; 
    //getter and setter 

Event.java

@Entity 
    @Table(name = "events") 
    public class Event { 
@Id 
@GenericGenerator(name = "generator", strategy = "increment") 
@GeneratedValue(generator = "generator") 
@Column(name = "eventId", nullable = false) 
private Long eventId; 

@Column(name = "title", nullable = false) 
private String title; 

@Column(name = "description", nullable = true) 
private String description; 

@Column(name = "startAt", nullable = false) 
@Temporal(TemporalType.TIMESTAMP) 
private Date startAt; 

@Column(name = "endAt", nullable = true) 
@Temporal(TemporalType.TIMESTAMP) 
private Date endAt; 

@Column(name = "isFullDay", nullable = false) 
private Boolean isFullDay; 

@ManyToMany(fetch = FetchType.EAGER) 
@JoinTable(name = "users_event", joinColumns = { @JoinColumn(name = "id_event", referencedColumnName = "eventId") }, inverseJoinColumns = { @JoinColumn(name = "id_user", table = "users", referencedColumnName = "id") }) 
private Set<User> user = new HashSet<User>(); 
/getter and setter 

EventRepo.java

public interface EventRepo extends CrudRepository<Event, Long> { 
Event findByUser(Set<User> user); 
    } 

私は私にこのクエリの出力を与えることができる何かを実装しようとしています。 select * from eventsここでeventidは(users_eventからのeventIdのid_user = xを選択してください) ここは私の実装です。何か入力してください?

 @RequestMapping(value = "/events", method = RequestMethod.GET) 
public @ResponseBody List<Event> getEvents() { 
    logger.debug("get event list"); 
    User x=new User(); 
    x.setId(1); 
    Set<User> user= new HashSet(); 
    user.add(x); 
    return (List<Event>) eventRepo.findByUser(user); 
} 

答えて

0

ちょうどあなたのEventRepoに次のメソッドを追加します。

List<Event> findAllByUserId(Long userId); 

をそして、このような何かにあなたのコントローラーを変更します。

@RequestMapping(value = "/events", method = RequestMethod.GET) 
public List<Event> getEvents() { 
    return eventRepo.findAllByUserId(1L); 
} 
+0

それは働きました!メソッド 'findAllByUserId'を定義する規則はありますか?そして、他のどのフィールドをユーザーテーブルから使用してクエリを作成できますか? – vivek

+0

はい、ルールは[ここ](https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods.query-creation)で定義されています。ほぼすべてのフィールドを使用できるはずです。 –

+0

また、イベントデータを保存している間、私はちょうどユーザーテーブルのすべての既存の列データの代わりにUserIdを渡すことができます何らかの方法はありますか?現在、私は次のようにやっている: タイトル:タイトル、 説明:説明、 startAt:startTimeの、 ENDAT:endTimeは、 isFullDay:偽、 ユーザー:[{ "ID":1、 "firstNameの": "スティーブ" 、 "family": "JOBS"、 "email": "[email protected]"、 "phone": "0033 1 23 45 67 89"、 "language": "en"、 "pictureId":null、 [ログイン ":" steve "、"パスワード ":" steve "、" burthDate ":null、"有効 ":真、"機関 ":[{" id ":1、" name ":" admin "}、 "id":2、 "name": "technical user"}、{"id":3、 "name": "user"}]}] – vivek

関連する問題