具有模式属性的Java Hibernate Generic DAO

时间:2014-10-20 10:03:03

标签: java hibernate generics dao

我正在编写抽象/通用 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();

1 个答案:

答案 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();
    }

(...)

就是这样。

此解决方案的缺点是您必须让所有实体都实现这个新接口,但我认为这是一个很小的代价。好处是所有这些都将由编译器检查。