Создание простой реляционной таблицы в JPAJAVA

Программисты JAVA общаются здесь
Anonymous
Создание простой реляционной таблицы в JPA

Сообщение Anonymous »

У меня есть таблица, которая в PostgreSQL выглядит так:

Код: Выделить всё

CREATE TABLE member_block (
member_id   INT   NOT NULL REFERENCES member(id),
block_id    INT   NOT NULL REFERENCES member(id),
CONSTRAINT different_ids CHECK (member_id != block_id),
PRIMARY KEY(member_id, block_id)
);
Как сопоставить это с JPA?
Я знаю, что можно сделать что-то вроде:

Код: Выделить всё

@Entity
public class MemberBlock {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
Long id;

@OneToOne
@JoinColumn(referencedColumnName = "ID")
Member blocker;

@OneToOne
@JoinColumn(referencedColumnName = "ID")
Member blocked;

}
Но это не совсем так. Мне известно о нескольких идентификаторах в JPA, но я не знаю, работают ли они с собственными типами:

Код: Выделить всё

@IdClass(MemberBlockId.class)
@Entity
public class MemberBlock {

@Id
@JoinColumn(referencedColumnName = "ID")
Member blocker;

@Id
@JoinColumn(referencedColumnName = "ID")
Member blocked;

}

record MemberBlockId(Member blocker, Member blocked);
Третья идея — добавить заблокированных участников в виде поля @ManyToMany непосредственно в Member.
Во всех трех подходах также отсутствует ограничение (поэтому участники не могут блокировать себя).>

Подробнее здесь: https://stackoverflow.com/questions/798 ... ble-in-jpa

Вернуться в «JAVA»