Bidirectional one-to-many example:

@Entity
public class EntityA {
@Id
@GeneratedValue
private int myIdA;
private String strA;
@OneToMany(mappedBy = "refEntityA")
private List<EntityB> entityBList;
.............
}

@Entity
public class EntityB {
@Id
@GeneratedValue
private int myIdB;
private String strB;
@ManyToOne
private EntityA refEntityA;
.............
}
Original Post Foreign key mapping strategy:

@Entity
public class Employee {
@Id
@GeneratedValue
private long id;
private String name;
@OneToMany
@JoinColumn(name = "EMPLOYEE_FK")
@MapKeyColumn(name = "TASK_DATE", nullable = true)
private Map<Date, Task> tasks;
.............
}

@Entity
public class Task {
@Id
@GeneratedValue
private long id;
private String name;
private String description;
.............
}
Original Post Bidirectional @OneToMany on Map values:

@Entity
public class Employee {
@Id
@GeneratedValue
private long id;
private String name;
@OneToMany(mappedBy = "taskEmployee", cascade = CascadeType.ALL)
@MapKeyColumn(name = "TASK_DATE", nullable = true)
private Map<Date, Task> tasks;
.............
}

@Entity
public class Task {
@Id
@GeneratedValue
private long id;
private String name;
private String description;
@ManyToOne
@JoinColumn(name = "EMP_FK")
private Employee taskEmployee;
.............
}
Original Post