Hibernate:如何映射与一组复杂对象的一对多关联?

Posted

技术标签:

【中文标题】Hibernate:如何映射与一组复杂对象的一对多关联?【英文标题】:Hibernate: How do i map an one-to-many association with a complex set of objects? 【发布时间】:2011-12-08 03:50:34 【问题描述】:

我有一个数据库模型,其中有两个表处于一对多关联中。例如,我将它们称为 BALL 和 BASKET,即使它没有多大意义。

一个篮子可以装很多球,一个球只能放在一个篮子里。

在域模型中,我有一个 Ball 类,一个带有 getter 和 setter 的简单类,还有一个 Basket 类。我还有一个“BallGroup”类,这是一个用于检索球的策略模式实现。

  public class Ball 

    // getter and setters.
  

  public interface IBallGroup 

    List getBalls(String type);
  

  public class BallGroupStrategyA 

    private List balls;

    List getBalls(String type) 
        // StrategyA impl.
    
  

  public class BallGroupStrategyB 

    private Tree balls;

    List getBalls(String type) 
        // StrategyB impl.
    
  

  public class Basket 

    // How do i map the balls collection in this attribute?
    private IBallGroup ballGroup;
  

球的集合实际上存储在 IBallGroup 对象中,但我的数据库中没有也不需要“BallGroup”表。

【问题讨论】:

【参考方案1】:

我可以做这样的关系(双向关系):

班级篮子

@OneToMany(targetEntity=Ball.class,
orphanRemoval = true,cascade=javax.persistence.CascadeType.ALL)
@JoinColumn(name="id_ball")
public Set<Ball> getBall() 
    return ball;

public void setBall(Set<Ball> ball) 
    this.ball = ball;


类球:

@ManyToOne
@JoinColumn(name="id_basket", nullable=false)
public Transportista getBasket() 
    return basket;

public void setBasket(Basket basket) 
    this.basket = basket;

【讨论】:

以上是关于Hibernate:如何映射与一组复杂对象的一对多关联?的主要内容,如果未能解决你的问题,请参考以下文章

慕课网Hibernate初探之一对多映射实验及总结

Hibernate:一对多映射导致循环对象

Hibernate hbm 多对多映射

hibernate 一对多 关系映射

使用一对多映射保存对象时出现 Spring + Hibernate id 问题

hibernate_关联映射_一对多