2015-05-26 3 views
3

У меня есть небольшая проблема. Я пытаюсь представить отношения с POJO и JPA к следующему отображению:дополнительные атрибуты во многих отношениях jpa

table A : 
id_a (PK) 
nom_a 

table B : 
id_b (PK) 
nom_b 

intermediate table : 
id_a(PK), id_b(PK) 
quantity 

и моя промежуточная таблица содержит составного ключ id_a(PK), id_b(PK).

Я хотел бы мое моделирование позволяет мне: при удалении элемента из для таблицы a или таблицы b требуется, чтобы элемент промежуточной таблицы удалялся водопадом

+0

Что ваш вопрос? – Ram

+1

ясно, что вам нужно иметь классы, чтобы представлять что-либо в JPA, поэтому, как вы думаете, этот «дополнительный атрибут» будет сохранен? –

+0

Я хочу сохранить в новой таблице соединений «промежуточная таблица» – isom

ответ

1

Вы должны создать промежуточную сущность с этим дополнительным полем и двунаправленными ссылками на оба объекта. Этот объект должен ссылаться на базовые объекты посредством отношения @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; 
} 
Смежные вопросы