在Hibernate

时间:2017-03-09 16:55:25

标签: java hibernate

好的,现在正式让我发疯。我必须在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();
}
}

问题是客户得到了保存,但订单却没有......为什么?

0 个答案:

没有答案