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);
}
它的工作!是否有任何规则来定义方法'findAllByUserId'?还有什么其他领域,我可以使用从用户表进行查询? – vivek
是的,规则是在这里定义的(https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods.query-creation)。你应该可以使用几乎任何领域。 –
还有什么办法,同时保存事件数据,我可以通过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