Java JPA @OneToMany нужно ответить взаимностью @ManyToOne? - PullRequest
7 голосов
/ 10 мая 2010
Create Table A (
ID varchar(8),
Primary Key(ID)
);

Create Table B (
ID varchar(8),
A_ID varchar(8),
Primary Key(ID),
Foreign Key(A_ID) References A(ID)
);

Учитывая, что я создал две таблицы, используя приведенные выше операторы SQL, и я хочу создать для них Entity классы, для класса B у меня есть следующие атрибуты:

@Id
@Column(name = "ID", nullable = false, length = 8)
private String id;
@JoinColumn(name = "A_ID", referencedColumnName = "ID", nullable = false)
@ManyToOne(optional = false)
private A AId;

В классе A мне нужно ответить взаимностью "многие к одному"?

@Id
@Column(name = "ID", nullable = false, length = 8)
private String id;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "AId")
private List<B> BList; //<-- Is this attribute necessary?

Есть ли необходимость или хорошая идея иметь обратную @OneToMany для @ManyToOne? Если я приму решение об исключении аннотированного атрибута @OneToMany сейчас, вернется ли это, чтобы укусить меня дальше?

Ответы [ 2 ]

12 голосов
/ 10 мая 2010

Является ли необходимым или хорошей идеей иметь ответное @OneToMany для @ManyToOne?

Нет, это совсем не обязательно, это чисто дизайнерское решение. Весь вопрос в том ... Хотите ли вы это (то есть однонаправленное объединение):

uni-directional

Или это (то есть двунаправленная ассоциация):

bi-directional

Если вам не нужно получать B от A, то вы можете пропустить атрибут bs и OneToMany на стороне A.

Если я приму решение о дизайне, чтобы пропустить аннотированный атрибут @OneToMany сейчас, вернусь, чтобы укусить меня еще ниже.

Нет, и вы можете добавить его позже, если обнаружите, что оно вам нужно.

2 голосов
/ 10 мая 2010

Они не являются обязательными. Нет необходимости добавлять их в вашу модель, если вы не хотите их использовать.

Я бы рекомендовал вообще избегать обратного сопоставления, потому что такие коллекции могут стать довольно большими, и большинство слоев устойчивости не справляются с этим очень хорошо. Во многих случаях вам придется самостоятельно добавлять / удалять уже загруженные / управляемые объекты, связанные с этими коллекциями. Поэтому добавляйте их только в том случае, если они действительно облегчают вам задачу.

...