Ответ Spring boot rest дает 1 результат на OneToMany, когда в базе данных есть несколько объектов

Для школьного проекта мы должны создать сервер для загрузки spring, который взаимодействует с нашей базой данных MySQL. Вот скриншот базы данных:

Ответ Spring boot rest дает 1 результат на OneToMany, когда в базе данных есть несколько объектов

Для моей пользовательской модели у меня есть следующее:

@Entity
@Table(name = "User")
@Setter
public class User extends ResourceSupport implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id_user", updatable = false, nullable = false)
    @JsonSerialize
    private Long id;
    @Getter
    private String firstName;
    @Getter
    private String lastName;
    @Getter
    private String email;
    @Getter
    private String password;
    @Getter
    private Double hourlyWage;
    @Getter
    private String adress;
    @Getter
    private String city;
    @Getter
    private Boolean isManager;
    @Getter
    @OneToMany
    @JoinTable(name = "user_to_project", joinColumns = @JoinColumn(name = "id"), inverseJoinColumns = @JoinColumn(name = "project_id"))
    private List<Project> projects;

Затем для моего класса проекта:

@Entity
@Table(name = "project")
@Setter
public class Project extends ResourceSupport {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id_project")
    @JsonSerialize
    private Long id;
    @Getter
    @OneToOne
    @JoinColumn(name = "owner", referencedColumnName = "id")
    private Company owner;
    @Getter
    private String description;
    @Getter
    private String name;
    @Getter
    private double payout;
    @Getter
    private boolean internal;
    @Getter
    @OneToMany
    @JoinTable(name = "user_to_project", joinColumns = @JoinColumn(name = "id"), inverseJoinColumns = @JoinColumn(name = "user_id"))
    private List<User> users;

Я не знаю, что я делаю неправильно, потому что это результат, который я получаю:

Ответ Spring boot rest дает 1 результат на OneToMany, когда в базе данных есть несколько объектов

в то время как у меня есть это в моей таблице ссылок:

Ответ Spring boot rest дает 1 результат на OneToMany, когда в базе данных есть несколько объектов

Я надеюсь, что у кого-то есть ответ на мой вопрос, потому что меня тошнит от весенней загрузки и этого школьного проекта.

Ваше отношение Project и User не OneToMany, а ManyToMany. Исправьте свои сущности.

Bor Laze 30.05.2019 21:03

@BorLaze спасибо за быстрый ответ! но, к сожалению, это все еще не решает проблему ... Однако вы правы, так что спасибо за это!

Joris van Roy 30.05.2019 21:08
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
2
46
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я не знаю, поможет это вам или нет, но ниже мой код:

// Role
@LazyCollection(LazyCollectionOption.FALSE)
@ManyToMany(mappedBy = "roles")
@JsonIgnoreProperties("roles")
@OrderBy("id")
private List<User> users;

// User
@LazyCollection(LazyCollectionOption.FALSE)
@ManyToMany
@JoinTable(name = "users_roles",
        joinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id"),
        inverseJoinColumns = @JoinColumn(name = "role_id", referencedColumnName = "id")
)
@JsonIgnoreProperties("users")
@OrderBy("id")
private List<Role> roles;

Также обратите внимание - вместо SQL, где таблицы m2m равны, в JPA одна таблица является «ведущей» (пользовательская в моем примере), а другая - «ведомой». «Раб» должен иметь модификатор mappedBy в аннотации @ManyToMany.

Табличные DDL (postgres):

create table roles
(
  id               serial                not null
    constraint roles_pkey
    primary key,
  version          bigint default 0
);

create table users
(
  id               serial                not null
    constraint users_pkey
    primary key,
  version          bigint  default 0
);

create table users_roles
(
  user_id integer not null
    constraint fk_users
    references users,
  role_id integer not null
    constraint fk_roles
    references roles,
  constraint users_roles_pkey
  primary key (user_id, role_id)
);

Я надеюсь, что это будет полезно. Удачи.

Я очень благодарен за вашу помощь, но, к сожалению, код, который вы предоставили, все еще не помог. Вы случайно не могли бы выложить скриншот своих таблиц? таким образом я знаю, что у меня правильно установлены имена JoinColumn

Joris van Roy 30.05.2019 23:04

@ Джорис ван Рой, я добавил DDL в свой пост - проверьте это.

Bor Laze 30.05.2019 23:21

спасибо за помощь! я, наконец, получил это, после того, как я установил hibernate для печати строк sql, я понял, что ввел неправильные имена столбцов соединения ... Еще раз большое спасибо, это было большой головной болью для меня, хахах

Joris van Roy 30.05.2019 23:40

Другие вопросы по теме