`
17studio
  • 浏览: 194215 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

hibernate对象实现对象互动(如接口调用)的几种方法

阅读更多
前提:
1、hibernate对象(即本身是需要可以存储的)
2、接口实现需要状态

方法总结如下:
1、对原有的对象扩展字段
2、对扩展属性建立新表,把hibernate对象和新表做关联,hibernate对象负责管理属性
3、对扩展属性建立新表,使用外部类管理hibernate对象和扩展表之间的关系,实现接口

方法1示例:

interface Ownable {
  public setOwner(id);
}

class ItemEntity implements Ownable {
    @OneToOne
    private Owner owner;
 
    public setOwner(Integer id) {
       owner = dao.getClass(Owner.class, id);
    }
}


方法2示例:

interface Ownable {
  public setOwner(id);
}

class ItemEntity implements Ownable {
    @OneToOne
    private RelationEntity relation;
 
    public setOwner(Integer id) {
       relation.setOwnerId(id);
       relation.setThisId(this.getId());
    }
}

class RelationEntity {
  private ownerid;
  private itemid;
}

class OwnerEntity {
  private id;

  public buy(Ownable item) {
    item.setOwner(this.getId());
  }
}

void main() {
  OwnerEntity owner;
  owner.buy(new Item());
}

方法3示例:

class OwnableService () {
  public buy(Owner owner, Item item, RelationEntity relation);
}

上述三种方法应用于场景Owner.hasItem()时:
1. 方法1不能满足
2. 方法2、3可以满足

上述三种方法应用于场景Owner.getItemPrice(item)且item没有price字段时:
1. 方法1不能满足
2. 方法2、3可以满足

上述三种方法应用于场景List<Ownable> Owner.getBuyableItems()时:
1. 方法1、2不能满足
2. 方法3可以满足

方法2和方法3的比较:
1、前者需要修改pojo,后者不需要
2、前者的设计复杂度较高,对hibernate依赖较深
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics