【问题标题】:How to retrieve data based on inverseColumn data using CrudRepository in springboot?如何在 Spring Boot 中使用 CrudRepository 检索基于反列数据的数据?
【发布时间】:2017-06-11 17:22:55
【问题描述】:

我有两个表,即用户和事件。新用户注册时将填写用户表。稍后同一用户可以创建日历事件。因此事件表将被填充,并且 users_events 将保持基于用户的事件映射。 我想根据登录的用户 ID 查找所有事件。所以这里是查询,它应该根据它返回数据。 select * from events where eventid in(从 users_event where id_user=x 中选择 eventId)。这是我的用户和事件实体类。

用户.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 where eventid in (select eventId from users_event where 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);
}

【问题讨论】:

    标签: spring hibernate spring-boot crud spring-rest


    【解决方案1】:

    只需将以下方法添加到您的EventRepo

    List<Event> findAllByUserId(Long userId);
    

    然后将你的控制器修改成这样:

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

    【讨论】:

    • 成功了!是否有任何规则来定义方法 'findAllByUserId' ?以及我可以从用户表中使用哪些其他字段进行查询?
    • 是的,规则已定义here。您应该能够使用几乎任何字段。
    • 还有什么办法,在保存事件数据的同时,我可以只传递UserId而不是users表的所有现有列数据?目前我这样做:title:title,description:description,startAt:startTime,endAt:endTime,isFullDay:false,user:[{“id”:1,“firstName”:“Steve”,“familyName”:” JOBS","email":"steve.jobs@apple.com","phone":"0033 1 23 45 67 89","language":"en","pictureId":null,"login":"steve ","password":"steve","burthDate":null,"enabled":true,"authorities":[{"id":1,"name":"admin"},{"id":2, "name":"技术用户"},{"id":3,"name":"user"}]}]
    • 是的,有。您需要做的是为事件数据创建一个单独的类,例如带有普通userId 字段的EventDTO,为用户interface UserRepo extends JpaRepository 创建一个存储库,然后在从eventDTO 重构event 后在您的服务层中@ 您可以做event.setUser(Collections.singleton(userRepo.getOne(eventDTO.getUserId())));.
    猜你喜欢
    • 2016-02-12
    • 2018-07-03
    • 1970-01-01
    • 2021-04-08
    • 2018-08-01
    • 1970-01-01
    • 2016-04-07
    • 2012-08-24
    • 2021-03-03
    相关资源
    最近更新 更多