gpt4 book ai didi

具有模式属性的 Java Hibernate Generic DAO

转载 作者:行者123 更新时间:2023-12-01 12:24:34 25 4
gpt4 key购买 nike

我正在编写抽象/通用 DAO 函数来执行 Hibernate 创建、更新、查找、删除查询。

对于更新功能,我想检查名为mode的特定属性是否设置为0,这意味着记录可更新(0-读/写,1-删除,2-只读)。因此,我需要访问对象的 getMode 函数,因此我不能简单地调用通用更新函数,因为它不知道该属性是否存在。

我怎样才能编写一个假设属性模式存在的通用更新函数,这可能吗?

session = factory.openSession();
tx = session.beginTransaction();
if(at.getMode() == 0){
session.update(at);
}
tx.commit();
session.close();

最佳答案

我以前也遇到过类似的情况。在我工作的系统中,所有表都有最后更新的时间戳,因此每当发生更新时,通用方法都会使用当前时间更新字段,然后执行更新。

请记住,这可能不是唯一的解决方案。

就我而言,所有实体都实现了一个接口(interface)。对于您的情况,界面应该是这样的:

public interface HasModeAttribute {

//assumed mode is an int
int getMode();

}

在通用 DAO 中,您所要做的就是正确声明一个接受所有实现此接口(interface)的类的通用方法:

(...)
//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();
}

(...)

就是这样。

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

关于具有模式属性的 Java Hibernate Generic DAO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26463009/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com