Создание простой реляционной таблицы в 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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