2010-05-10 6 views
7
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, у меня есть эти атрибуты члена:Java JPA @OneToMany необходимо ответить взаимностью @ManyToOne?

@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, вернется ли он, чтобы снова укусить меня?

ответ

11

Нужна или хорошая идея иметь обратную @OneToMany для @ManyToOne?

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

uni-directional

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

bi-directional

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

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

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

+0

+1 и проверьте @Pascal Thivent: для указания, я могу добавить его позже, если мне это нужно: это было моей главной заботой. – bguiz

+0

Обычно я стараюсь избегать однонаправленных сопоставлений как можно больше. Просто потому, что что-то в дате основывается с отдельной таблицей соединений (по какой-либо причине), не означает, что моя объектная модель должна делать то же самое. В приведенном выше примере OneToOne-Mapping будет достаточно для однонаправленного решения (конечно, это должно соответствовать домену). – lostiniceland

2

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

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

+0

+1 @ Daniel Bleisteiner: Огромное количество кода, необходимого для их обработки, может стать довольно громоздким. Спасибо за совет – bguiz

Смежные вопросы