gpt4 book ai didi

java - JPA 映射实体图

转载 作者:行者123 更新时间:2023-11-29 06:15:25 25 4
gpt4 key购买 nike

从昨天开始我的太受欢迎的问题中解脱出来:

Hibernate(JPA) mapping a HashMap

我正在尝试映射一个本质上如下所示的结构:

Map<User, List< POJOWithComposite >>

其中User是一个基本模型,类似如下:

@Entity
public class User extends Model {
public String username;
public String password;
...
}

POJOWithComposite是另一个实体,它有一些映射的实体和一些原语,类似于:

@Entity
public class POJOWithComposite extends Model {
public int someIntField;
public OtherModel compositeEntity;
...
}

该结构可以类似于购物车。所以 User 包含帐户信息,OtherModel 可能是可购买的商品,而 POJOWithComposite 是包含商品和数量的购物车,比如说.当涉及到主要对象时,我的类比有点不合理,但幽默一下,假设对于每个 session ,我们都将用户支付的购物车添加到列表中,然后将其存档,比如说。

首先,如果列表属于每个用户,我可以将它添加到 User 模型中,尽管我觉得这不是很模块化(即信息不是真正的用户帐户信息). ATM,这张 map 位于一个类似于实用程序的购物类中,它负责将购物车与购物者相匹配,以免我使 User 模型太大。 (这里是否有更好的模式可以使用?)

假设我继续沿着这条路走下去,让我们尝试绘制这张 Map 的 map 。理想情况下,我希望能够按原样映射它。尽管我在这方面运气不佳。

我偶然听到一些关于映射 ArrayList 很容易的讨论,因为它是 Serializable,尽管在​​这里没有设法实现它。

所以我做了一个包装器实体:

@Entity
public class POJOWithCompositeList extends Model {
@OneToMany
List<POJOWithComposite> list = new ArrayList<POJOWithComposite>();
}

这行得通。当我像这样使用这个实体时,我可以映射我的新:

@ManyToMany
Map<User, POJOWithCompositeList>

虽然我不太喜欢这个解决方案,因为我添加了另一个映射实体,即包装实体意味着数据库中的另一个表,这意味着每个查询等的另一个连接...

所以我的两个问题是:

  1. 从设计的角度来看,将此 Map 粘贴到 util 类中是否可以接受?
  2. 假设我们像这样映射模型,我该如何改进映射?

最佳答案

创建单例实体没有意义。您应该简单地映射 User 和 POJOWithComposite 之间的一对多关联。

获取用户(使用 session.get())并调用 user.getPOJOWithComposites() 以获取给定用户的所有 POJOWithComposites。如果您想要多个用户使用它们,请使用 HQL 查找这些用户,并遍历找到的用户并导航到关联中。单例映射是 hibernate session 。使用它的方法查询数据库。

关于java - JPA 映射实体图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5277522/

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