Close

JPA - @MapKeyColumn Examples

JPA JAVA EE 

@Entity
public class Customer {
@Id
@GeneratedValue
private int id;

private String name;
@ElementCollection
@MapKeyColumn(name = "item")
@Column(name = "qty")
@CollectionTable(name = "ITEM_QTY")
private Map<String, Integer> itemQtyMap;
.............
}
Original Post




@Entity
public class Customer {
@Id
@GeneratedValue
private int id;
private String name;
@ElementCollection
@CollectionTable(name = "ORDERS")
@MapKeyColumn(name = "TYPE")
private Map<String, Order> orderMap;
.............
}

@Embeddable
public class Order {
private String item;
private int qty;
private Date date;
.............
}
Original Post




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

@Entity
public class Task {
@Id
@GeneratedValue
private long id;
private String name;
private String description;
.............
}
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




See Also