前提:
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依赖较深
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依赖较深