I am trying to do a simple example using java.util.Map in Hibernate by creating a Customer entity with a Map of Order entities.
Here are my Java classes:
Customer.java:
@Entity
public class Customer {
@Id
@GeneratedValue
private Integer id;
@OneToMany(mappedBy = "customer")
@MapKey(name = "orderNumber")
private Map<String, Order> orders = new HashMap<String, Order>();;
}
Order.java
@Entity
@Table(name="TB_ORDER")
public class Order {
@Id
@GeneratedValue
private Integer id;
private String orderNumber;
@ManyToOne
private Customer customer;
}
Now I have created a program to save a customer and Orders:
public class AppTest {
public static void main(String[] args) {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
saveCustomer(session);
HibernateUtil.getSessionFactory().close();
}
private static void saveCustomer(Session session) {
session.getTransaction().begin();
Customer customer = new Customer();
Order order = new Order();
order.setCustomer(customer);
//order.setOrderNumber("100");
Map<String, Order> map = new HashMap();
map.put("100", order);
customer.setOrders(map);
session.save(customer);
session.save(order);
session.getTransaction().commit();
}
}
As per my mapping, the key of Map represents the orderNumber property of my Order class. So when I created a map with key as "100" and trying save using Hibernate then the field is set as empty in my database for TB_ORDER table. But if I try to use order.setOrderNumber("100") then the value is getting saved to database. Please tell me where I am doing mistake?