gpt4 book ai didi

java - 使用 Hibernate 分配映射键不会保存在数据库中

转载 作者:行者123 更新时间:2023-12-01 12:37:50 25 4
gpt4 key购买 nike

我正在尝试在 Hibernate 中使用 java.util.Map 做一个简单的示例,方法是创建一个带有 Order 映射的 Customer 实体实体。

这是我的 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>();;
}

订单.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”的 map 并尝试使用 Hibernate 保存时,该字段在我的数据库中的 TB_ORDER 表中设置为空。但是如果我尝试使用 order.setOrderNumber("100") 那么该值将保存到数据库中。请告诉我我哪里做错了?

最佳答案

你没有做错任何事。您有责任维护内存中对象图的一致性。映射到数据库中的列的是 Order 实体的 orderNumber 字段。因此,如果它为 null,Hibernate 会在列中保存 null。

MapKey 注释告诉 Hibernate 在从数据库加载客户订单并填充 map 时如何从实体中提取键。仅此而已。

关于java - 使用 Hibernate 分配映射键不会保存在数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25412532/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com