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?
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
bsattribute and theOneToManyon A side.No, and you can add it later if you discover that you need it.