我正在编写抽象/通用 DAO函数来执行Hibernate创建,更新,查找,删除查询。
如果是更新功能,我想检查一个名为 mode 的特定属性是否设置为0,这意味着该记录是可更新的(0-读/写,1-删除,2-只读)。 因此,我需要访问Object的 getMode 函数,因此我不能简单地调用泛型更新函数,该函数不知道该属性的存在。
如何设法编写通用更新函数,假定存在属性模式,是否可以?
session = factory.openSession();
tx = session.beginTransaction();
if(at.getMode() == 0){
session.update(at);
}
tx.commit();
session.close();
答案 0 :(得分:1)
我之前遇到过类似的情况。在我工作的系统中,所有表都有最后更新的时间戳,因此每当更新发生时,通用方法都会使用当前时间更新字段,然后执行更新。
请记住,这可能不是唯一的解决方案。
在我的情况下,所有实体都实现了一个接口。对于您的情况,接口应该是这样的:
public interface HasModeAttribute {
//assumed mode is an int
int getMode();
}
在您的通用DAO中,您所要做的就是正确声明一个接受所有实现此接口的类的泛型方法:
(...)
//omitted class declaration here
public <T extends HasModeAttribute> void yourUpdate(T entity) {
session = factory.openSession();
tx = session.beginTransaction();
if(entity.getMode() == 0){
session.update(entity);
}
tx.commit();
session.close();
}
(...)
就是这样。
此解决方案的缺点是您必须让所有实体都实现这个新接口,但我认为这是一个很小的代价。好处是所有这些都将由编译器检查。