JPA Получить все каналы пользователя и подписчиков - PullRequest
0 голосов
/ 11 апреля 2019

Я изучаю аннотацию Spring JPA и работаю над проектом весенней загрузки для социального приложения: Технологический стек:

  • пружинный башмак
  • Spring Security
  • JPA
  • База данных MySQL

Пока что я могу создавать отдельные объекты и извлекать их, используя отдельные операторы where и and.

У меня есть модель User.class

    @NoArgsConstructor
@Entity
@Table(name = "users")
public class User extends Auditable<String> implements UserDetails {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Getter
    @Setter
    private Long id;


    @Getter
    @Setter
    private String username;

    @Getter
    @Setter
    private String name;

    @Getter
    @Setter
    private String avatar;

    @Getter
    @Setter
    @OneToMany(mappedBy = "user", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    @JsonIgnore
    private Set<Tweet> tweets;

    @Getter
    @Setter
    @OneToMany(mappedBy = "user", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    @JsonIgnore
    private Set<Like> likes;

    @Getter
    @Setter
    @OneToMany(mappedBy = "followerUser", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    @JsonIgnore
    private Set<Follower> followers;

    @Getter
    @Setter
    @OneToMany(mappedBy = "followingUser", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    @JsonIgnore
    private Set<Following> following;


    @Getter
    @Setter
    @ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @JoinTable(name = "user_role", joinColumns = {@JoinColumn(name = "user_id", referencedColumnName = "id")},
            inverseJoinColumns = {@JoinColumn(name = "role_id", referencedColumnName = "id")})
    @JsonIgnore
    private Set<Role> roles;


    @Getter
    @Setter
    @Transient
    @JsonIgnore
    private List<GrantedAuthority> authorities;


    public User(String username) {
        this.username = username;
    }

    @JsonIgnore
    @Override
    public String getPassword() {
        return null;
    }

    @JsonIgnore
    @Override
    public boolean isAccountNonExpired() {
        return true;
    }

    @JsonIgnore
    @Override
    public boolean isAccountNonLocked() {
        return true;
    }

    @JsonIgnore
    @Override
    public boolean isCredentialsNonExpired() {
        return true;
    }

    @JsonIgnore
    @Override
    public boolean isEnabled() {
        return true;
    }
}

Tweet.class

@NoArgsConstructor
@Entity
@Table(name = "tweets")
public class Tweet extends Auditable<String> {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Getter
    @Setter
    private Long id;

    @Getter
    @Setter
    @Column(columnDefinition = "TEXT")
    private String content;

    @Getter
    @Setter
    @ManyToOne
    @JoinColumn(name = "user")
    private User user;

    @Getter
    @Setter
    @OneToMany(mappedBy = "tweet", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    private Set<Like> likes;

}

Following.class

@Entity
@Table(name = "following")
public class Following extends Auditable<String> {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Getter
    @Setter
    private Long id;

    @Getter
    @Setter
    @ManyToOne
    private User followingUser;

}

Я хочу написать JPA Query, получить все твиты из таблицы твитов, где я подписан на других пользователей, а текущий пользователь - я.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...