首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JPA映射实体映射

JPA映射实体映射
EN

Stack Overflow用户
提问于 2011-03-11 19:38:32
回答 2查看 2.6K关注 0票数 1

从昨天开始我的问题太受欢迎了:

Hibernate(JPA) mapping a HashMap

我试图映射一个基本如下的结构:

代码语言:javascript
复制
Map<User, List< POJOWithComposite >>

其中User是一个基本模型,类似于以下内容:

代码语言:javascript
复制
@Entity
public class User extends Model {
   public String username;
   public String password;
   ...
}

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

代码语言:javascript
复制
@Entity
public class POJOWithComposite extends Model {
   public int someIntField;
   public OtherModel compositeEntity;
   ...
}

这种结构可以类似于购物车。因此,User保存帐户信息,OtherModel可以是一个可购买的项目,而POJOWithComposite是一个购物车,包含项目和数量,比如说。当涉及到主要对象时,我的类推分解了一点,但幽默一下,假设在每一次会话中,我们都会将用户支付的购物车添加到列表中,然后将其存档。

首先,如果列表属于每个用户,我可以将其添加到User模型中,尽管我觉得这不是非常模块化的(即信息实际上不是用户帐户信息)。ATM,这张地图位于一个类似于实用工具的购物类中,它负责把购物车和购物者匹配起来,这样我就不会让User模型太大了。(这里是否有更好的模式可供使用?)

假设我继续沿着这条路走下去,让我们试着映射这个Map。理想情况下,我希望能够按原样绘制地图。虽然我在这方面运气很差。

我偶然看到一些关于映射ArrayList的讨论,因为它是Serializable,尽管在这里没有实现它。

所以我制作了一个包装实体:

代码语言:javascript
复制
@Entity
public class POJOWithCompositeList extends Model {
   @OneToMany
   List<POJOWithComposite> list = new ArrayList<POJOWithComposite>();
}

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

代码语言:javascript
复制
@ManyToMany
Map<User, POJOWithCompositeList>

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

所以我的两个问题是:

从设计的角度来看,acceptable?

  • Assuming是把
  1. 粘贴到util类中,我们这样映射模型,如何改进映射呢?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-03-16 16:47:07

最后,我在复合部件上创建了一个具有@ManyToMany映射的新实体,如下所示:

代码语言:javascript
复制
@Entity
public class POJOWithComposites extends Model {

   @ManyToMany
   CompositeType compositePtr;

   @ManyToMany
   CompositeOtherType compositeOtherPtr;

   ...
}

这样,我确实把这个复杂性元素从我的用户模型中去掉了,因为它不是核心用户实体的一部分,并且允许高效的映射(外键)。

票数 1
EN

Stack Overflow用户

发布于 2011-03-11 20:20:07

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

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5277522

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档