JPA JAVA EE
@Entitypublic 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; .............}
@Entitypublic class Customer { @Id @GeneratedValue private int id; private String name; @ElementCollection @CollectionTable(name = "ORDERS") @MapKeyColumn(name = "TYPE") private Map<String, Order> orderMap; .............}
@Embeddablepublic class Order { private String item; private int qty; private Date date; .............}
@Entitypublic 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; .............}
@Entitypublic class Task { @Id @GeneratedValue private long id; private String name; private String description; .............}
Foreign key mapping strategy:
@Entitypublic 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; .............}
Bidirectional @OneToMany on Map values:
@Entitypublic 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; .............}
@Entitypublic class Task { @Id @GeneratedValue private long id; private String name; private String description; @ManyToOne @JoinColumn(name = "EMP_FK") private Employee taskEmployee; .............}