Мне нужна помощь в преобразовании следующих таблиц в Spring Data Entities. Я в некоторой степени смог сделать это, но я не могу понять, как применять ограничения на удаление и обновление. У меня есть таблица пользователей, которая будет содержать информацию о пользователе. Таблица разговоров будет тогда иметь идентификатор разговора и 2 столбца, чтобы представить оба идентификатора участвующих пользователей. Я пишу свое решение на Kotlin, но у меня тоже есть советы по Java. Использование Postgres. В конце дня я просто хочу закончить этими двумя таблицами с возможностью изменить первичный ключ в таблице пользователей и перенести его в таблицу разговоров.
CREATE TABLE users (
id uuid PRIMARY KEY,
bio character varying(255),
first_name character varying(255) NOT NULL,
last_name character varying(255) NOT NULL,
password character varying(255) NOT NULL,
username character varying(255) NOT NULL UNIQUE,
zip_code character varying(255) NOT NULL
);
CREATE TABLE conversations (
convoid BIGSERIAL PRIMARY KEY,
user_id1 uuid REFERENCES users(id) on delete cascade on update cascade,
user_id2 uuid REFERENCES users(id) on delete cascade on update cascade
);
Вот что я попробовал:
@Data
@NoArgsConstructor
@Entity
@Table(name = "users")
data class User(
@Id //primary key
var id: UUID = UUID.randomUUID(),
@Column(nullable = false)
var firstName: String,
@Column(nullable = false)
var lastName: String,
@Column(nullable = false, unique = true)
var username: String,
@Column(nullable = false)
var password: String,
@Transient
var confirmPassword: String,
@Column(nullable = false)
var zipCode: String,
@Column(nullable=true)
var bio: String?
)
@Data
@NoArgsConstructor
@Entity
@Table(name = "conversations")
data class Conversation(
@Id //primary key
@GeneratedValue(strategy = GenerationType.IDENTITY)
val convoID: Long,
@ManyToOne(cascade = [CascadeType.ALL])
@JoinColumn(name = "user_id1")
val user1: User, //FK of user table PK
@ManyToOne(cascade = [CascadeType.ALL])
@JoinColumn(name = "user_id2")
val user2: User, //FK of user table PK
@Transient
var participants: List<WebSocketSession>
)
Я пытаюсь обновить первичный ключ в таблице пользователей, но это не позволяет мне из-за ограничения внешнего ключа. Ясно, что Каскад не работает.