Для школьного проекта мы должны создать сервер для загрузки spring, который взаимодействует с нашей базой данных MySQL. Вот скриншот базы данных:
Для моей пользовательской модели у меня есть следующее:
@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;
Я не знаю, что я делаю неправильно, потому что это результат, который я получаю:
в то время как у меня есть это в моей таблице ссылок:
Я надеюсь, что у кого-то есть ответ на мой вопрос, потому что меня тошнит от весенней загрузки и этого школьного проекта.
@BorLaze спасибо за быстрый ответ! но, к сожалению, это все еще не решает проблему ... Однако вы правы, так что спасибо за это!
Я не знаю, поможет это вам или нет, но ниже мой код:
// 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
@ Джорис ван Рой, я добавил DDL в свой пост - проверьте это.
спасибо за помощь! я, наконец, получил это, после того, как я установил hibernate для печати строк sql, я понял, что ввел неправильные имена столбцов соединения ... Еще раз большое спасибо, это было большой головной болью для меня, хахах
Ваше отношение Project и User не OneToMany, а ManyToMany. Исправьте свои сущности.