Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在springboot中使用Crudepository基于inverseColumn数据检索数据?_Spring_Hibernate_Spring Boot_Crud_Spring Rest - Fatal编程技术网

如何在springboot中使用Crudepository基于inverseColumn数据检索数据?

如何在springboot中使用Crudepository基于inverseColumn数据检索数据?,spring,hibernate,spring-boot,crud,spring-rest,Spring,Hibernate,Spring Boot,Crud,Spring Rest,我有两个表,即用户和事件。用户表将在新用户注册时填写。稍后,同一用户可以创建日历事件。因此,事件表将被填充,用户\事件将根据用户保持事件的映射。 我想查找基于登录用户ID的所有事件。这里是查询,它应该返回基于它的数据。 从事件中选择*从事件中选择eventid从用户中选择eventid\u事件中选择id\u user=x。这是我的用户和事件实体类 User.java @Entity @Table(name = "users") public class User { @

我有两个表,即用户和事件。用户表将在新用户注册时填写。稍后,同一用户可以创建日历事件。因此,事件表将被填充,用户\事件将根据用户保持事件的映射。 我想查找基于登录用户ID的所有事件。这里是查询,它应该返回基于它的数据。 从事件中选择*从事件中选择eventid从用户中选择eventid\u事件中选择id\u user=x。这是我的用户和事件实体类

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);
    }
我正在尝试实现一些东西,它可以给我这个查询的输出。 从事件中选择*从用户中选择事件id从事件中选择事件id从事件中选择事件id\u 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);
}

只需在EventRepo中添加以下方法:

并将控制器修改为如下所示:

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

成功了!是否有任何规则来定义方法“findAllByUserId”?我还可以从Users表中使用哪些字段进行查询?是的,规则已经定义。您应该能够使用几乎任何字段。还有没有办法,在保存事件数据时,我可以只传递UserId而不是users表的所有现有列数据?目前我正在这样做:title:title,description:description,startAt:startTime,endAt:endTime,isFullDay:false,user:[{id:1,firstName:Steve,family:JOBS,email:Steve。jobs@apple.com,电话:0033 1 23 45 67 89,语言:en,pictureId:null,登录名:steve,密码:steve,burthDate:null,已启用:true,权限:[{id:1,名称:admin},{id:2,名称:技术用户},{id:3,名称:用户}]]是的,有。你要做的是为事件数据创建一个单独的类,比如带有普通userId字段的EventDTO,为用户界面UserRepo extensed JpaRepository创建一个存储库,然后在服务层中从EventDTO重建事件后,你可以执行event.setUserCollections.singletonuserRepo.getOneeventDTO.getUserId;。
@RequestMapping(value = "/events", method = RequestMethod.GET)
public List<Event> getEvents() {
    return eventRepo.findAllByUserId(1L);
}