Вы должны создать промежуточную сущность с этим дополнительным полем и двунаправленными ссылками на оба объекта. Этот объект должен ссылаться на базовые объекты посредством отношения @ManyToOne
, а базовые объекты должны ссылаться на этот промежуточный объект через отношение @OneToMany
.
Атрибут cascade
для ссылок @OneToMany
должен быть установлен в CascadeType.REMOVE, если вы хотите, чтобы этот промежуточный объект автоматически удалялся всякий раз, когда вы удаляете любой из подключенных элементов.
Вот отображение образца (добытчики и сеттера опущены):
@Entity
public class FirstEntity implements Serializable {
@Id
@GeneratedValue
private Long id;
@OneToMany(mappedBy = "firstEntity", cascade = CascadeType.REMOVE)
private Set<IntermediateEntity> intermediates = new HashSet<>();
}
@Entity
public class SecondEntity implements Serializable {
@Id
@GeneratedValue
private Long id;
@OneToMany(mappedBy = "secondEntity", cascade = CascadeType.REMOVE)
private Set<IntermediateEntity> intermediates = new HashSet<>();
}
@Entity
public class IntermediateEntity implements Serializable {
@Id
@GeneratedValue
private Long id;
private Long quantity;
@ManyToOne
@JoinColumn(name = "first_entity_id")
private FirstEntity firstEntity;
@ManyToOne
@JoinColumn(name = "second_entity_id")
private SecondEntity secondEntity;
}
Что ваш вопрос? – Ram
ясно, что вам нужно иметь классы, чтобы представлять что-либо в JPA, поэтому, как вы думаете, этот «дополнительный атрибут» будет сохранен? –
Я хочу сохранить в новой таблице соединений «промежуточная таблица» – isom