2017-06-11 94 views
0

我有两个表,即用户和事件。用户表将在新用户注册时填写。稍后相同的用户可以创建日历事件。所以事件表将被填充,并且users_events将基于用户保持事件的映射。 我想找到所有基于登录userId的事件。所以这里是查询,它应该基于它返回数据。 从其中包含eventid的事件中选择*(从user_event中选择eventId,其中id_user = x)。这是我的用户和事件实体类。如何使用CrudRepository在springboot中基于​​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 event where eventid in(select eventId from users_event where id_user = x) 这里是我的implementation.any输入吗?

 @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:开始时间, ENDAT:结束时间, isFullDay:假的, 用户:[{ “ID”:1, “名字”: “史蒂夫” ,“familyName”:“JOBS”,“email”:“[email protected]”,“phone”:“0033 1 23 45 67 89”,“language”:“en”,“pictureId” “登录”: “史蒂夫”, “密码”: “史蒂夫”, “burthDate”:空, “已启用”:真实的, “权威”:[{ “ID”:1, “名”: “管理员”},{ “id”:2,“name”:“technical user”},{“id”:3,“name”:“user”}]}] – vivek

相关问题