Search code examples
javaormjpapersistence

Java JPA @OneToMany needed to reciprocate @ManyToOne?


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?


Solution

  • 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):

    uni-directional

    Or this (i.e. a bi-directional association):

    bi-directional

    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.