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.