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依赖较深
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值