Когда я пытаюсь сохранить «Entity = USERS» в H2 База данных, я получаю следующую ошибку::
org.h2.jdbc.JdbcSQLSyntaxErrorException: невозможно назначить сгенерированный столбец «PUBLIC.USERS.USER_ID_PK».
Запрос SQL: вставить в пользователей (пароль, логин, user_id_pk) значения (?,?,?) [90154-224]
На мой взгляд, эта ошибка возникает из-за того, что Spring JPA сам генерирует идентификатор и пытается вставить этот идентификатор в саму базу данных, а H2 хочет сам сгенерировать идентификатор и вставить его в таблицу.
Если я создам столбец «user_id_pk» в «USERS» " такую таблицу:: "user_id_pk целое число PRIMARY KEY" и измените GenerationType в "Entity = USERS", тогда возникнут различные ошибки.
- GenerationType .AUTO :: объект ссылается на несохраненный временный экземпляр — сохраните временный экземпляр перед очисткой: Роли
- GenerationType.SEQUENCE:: объект ссылается на несохраненный временный экземпляр — сохраните временный экземпляр перед очисткой: Роли
- GenerationType.IDENTITY:: JdbcSQLIntegrityConstraintViolationException: NULL не разрешен для столбца «USER_ID_PK»;
- GenerationType.AUTO :: объект ссылается на несохраненный временный экземпляр — сохраните временный экземпляр перед сбросом: Роли
- GenerationType.SEQUENCE:: объект ссылается на несохраненный временный экземпляр – сохраните временный экземпляр перед очисткой: Роли
- GenerationType.IDENTITY:: объект ссылается на несохраненный временный экземпляр — сохраните временный экземпляр перед сбросом: Роли
- GenerationType.AUTO :: Невозможно назначить созданный столбец «PUBLIC.USERS.USER_ID_PK».
- GenerationType.SEQUENCE :: Сгенерированный столбец "PUBLIC.USERS.USER_ID_PK" не может быть назначен
- GenerationType.IDENTITY:: объект ссылается на несохраненный временный экземпляр - сохраните временный экземпляр перед очисткой : Роли
CREATE SEQUENCE USERS_SEQ START WITH 1 INCREMENT BY 50;
Мои таблицы::
CREATE TABLE PUBLIC.ROLES (
role_id_pk Integer GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
role VARCHAR
);
CREATE TABLE PUBLIC.USERS (
user_id_pk Integer GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
login VARCHAR,
password VARCHAR
);
Моя сущность::
@Entity
@Table(name = "users")
public class MyUser {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "user_id_pk")
private Long id;
@Column(name = "login")
private String username;
@Column(name = "password")
private String password;
@ManyToMany
@JoinTable(name = "USERS_ROLES",
joinColumns = {@JoinColumn(name = "user_id_pk")},
inverseJoinColumns = {@JoinColumn(name = "role_id_pk")})
private List listRoles;
Моя сущность::
@Entity
@Table(name = "roles")
public class Roles {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "role_id_pk")
private Long id;
@Enumerated(EnumType.STRING)
@Column(length = 20, name = "role")
private ERole name;
@ManyToMany(mappedBy="listRoles")
private List myUsersList;
Подробнее здесь: https://stackoverflow.com/questions/791 ... g-data-jpa