好的,现在正式让我发疯。我必须在SO上搜索和阅读100个问题。
文档(JPA和Hibernate)也没有任何帮助。我迷路了!
这种情况:2个类,Customer和Order,OneToMany关系。我有类似的测试应用程序与List工作,但我需要这是一个地图。
客户类:
package entity;
import java.util.HashMap;
import java.util.Map;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.MapKey;
import javax.persistence.OneToMany;
import javax.persistence.Table;
@Entity
@Table(name="customers")
public class Customer {
@Id @GeneratedValue public Integer getId() { return id; }
public void setId(Integer id) { this.id = id; }
private Integer id;
@OneToMany(mappedBy="customer")
@MapKey(name="number")
public Map<String,Order> getOrders() { return orders; }
public void setOrders(Map<String,Order> orders) { this.orders = orders; }
private Map<String,Order> orders = new HashMap<String,Order>();
}
Order类
package entity;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
@Entity
@Table(name="orders")
public class Order {
@Id @GeneratedValue public Integer getId() { return id; }
public void setId(Integer id) { this.id = id; }
private Integer id;
public String getNumber() { return number; }
public void setNumber(String number) { this.number = number; }
private String number;
@ManyToOne
public Customer getCustomer() { return customer; }
public void setCustomer(Customer customer) { this.customer = customer; }
private Customer customer;
}
测试应用:
package apps;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.query.Query;
import entity.Customer;
import entity.HibernateUtil;
import entity.Order;
public class CustomerTest {
public CustomerTest() {
Session session = HibernateUtil.getSession();
Transaction tx = null;
try {
tx = session.beginTransaction();
String hql = "from Customer";
Query<Customer> q = session.createQuery(hql,Customer.class);
List<Customer> result = (List<Customer>) q.getResultList();
// output omitted...
Customer c = new Customer();
Map<String,Order> orders = new HashMap<String,Order>();
Order o = new Order();
o.setNumber("1");
o.setCustomer(c);
orders.put("1", o);
session.save(c);
tx.commit();
} catch (HibernateException e) {
if (tx != null)
tx.rollback();
e.printStackTrace();
} catch (Exception ex) {
System.out.println(ex.getMessage());
} finally {
}
session.close();
HibernateUtil.cleanup();
}
public static void main(String[] args) {
new CustomerTest();
}
}
问题是客户得到了保存,但订单却没有......为什么?