【发布时间】:2014-10-14 06:32:01
【问题描述】:
我正在尝试通过创建带有Order 实体映射的Customer 实体来在Hibernate 中使用java.util.Map 做一个简单的示例。
这是我的 Java 类:
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;
}
现在我创建了一个程序来保存客户和订单:
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();
}
}
根据我的映射,Map 的键代表我的 Order 类的 orderNumber 属性。因此,当我创建一个键为“100”的地图并尝试使用 Hibernate 保存时,该字段在我的数据库中为 TB_ORDER 表设置为空。但是,如果我尝试使用 order.setOrderNumber("100") 那么该值将保存到数据库中。请告诉我我在哪里做错了?
【问题讨论】: