开发者_C百科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)
);
Given that I have created two tables using the SQL statements above, and I want to create Entity
classes for them, for the class B
, I have these member attributes:
@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;
In class A
, do I need to reciprocate the many-to-one relationship?
@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?
Is it a necessary or a good idea to have a reciprocal @OneToMany
for the @ManyToOne
? If I make the design decision to leave out the @OneToMany
annotated attribute now, would that come back to bite me further along?
Is it a necessary or a good idea to have a reciprocal @OneToMany for the @ManyToOne?
No, it's not mandatory at all, it's a pure design decision. The whole question is... Do you want this (i.e. an uni-directional association):
Or this (i.e. a bi-directional association):
If you don't need to get Bs from A, then you can skip the bs
attribute and the OneToMany
on A side.
If I make the design decision to leave out the @OneToMany annotated attribute now, will come back to bite me further down.
No, and you can add it later if you discover that you need it.
They are optional. There is no need to add them to your model if you don't want to use them.
I'd sugguest to avoid the reverse mapping at all because such collections may become quite large and most persistance layers don't handle these very good. In many cases you'd have to deal with add/remove of already loaded/managed entities related to these collections yourself. So only add those if they really make things easier for you.
Sure not. Thats design decision between one vs two direction relationship. In most casses, a better choice is to have one direction relationship, especially if its a domain classes. doing this, your design will express better the mean of your domain.
精彩评论