hibernate envers-如何搜索未审核的实体

mv1qrgav  于 2021-06-29  发布在  Java
关注(0)|答案(1)|浏览(264)

我存储到数据库的实体日志是不可变的(不会更改),但它包含的其他类(实体)可以更改我是否必须用@audited(我的意思是log)注解这个类?这将创建额外的历史表,这没有任何意义,因为日志不能更改,所以它只是创建重复项。但是当我不添加@audited时,我不能使用auditreader(auditquery)搜索它。。。有人能帮我吗?
例子:

LOG[id, weather_station_id, measurement ...]
WEATHER_STATION[id, name ...]
SENSOR[id, name, weather_station_id ...]

传感器或气象站的名称可以改变,我需要能够得到原始数据时,日志被创建。
编辑:我将尝试更详细地描述我的问题。我正在从气象站的传感器那里得到一些测量数据,气象站有一些传感器。我需要将这些度量存储到数据库中,以便以后能够读取它们(我称之为“日志”)。测量值不能改变。日志类(实体)与weatherstation类有引用(关系),weatherstation类引用多个传感器。一些关于气象站和传感器的信息可能会随着时间的推移而改变,例如固件版本等,我需要能够在测量时从数据库中获取整个日志类,以便能够在进行测量时检查固件编号。
我想实现类似loggetlogfromdb(long id)的东西,它将返回日志类,包括测量时的weatherstation信息和测量时的传感器信息。
当我将weatherstation、sensor和log标记为audited时,我能够在hibernate enver中获得类似的行为。但是正如您所看到的,日志表根本没有改变,所以使用日志历史表是没有意义的,因为它总是包含相同的数据。
我希望我的问题现在更清楚了。
我现在就是这样做的:

public Optional<Log> findVersionById(Integer id) {
    AuditReader auditReader = AuditReaderFactory.get(entityManager);
    AuditQuery query = auditReader.createQuery().forRevisionsOfEntity(Log.class, true, false);
    query.add(AuditEntity.revisionType().eq(RevisionType.ADD));
    query.add(AuditEntity.id().eq(id));
    Log log = (Log)query.getSingleResult();

    return Optional.of(log);
}
j1dl9f46

j1dl9f461#

您可以使用hql搜索已审核实体和普通实体。尝试调试以查看已审核实体的元模型类型的结构。您可以通过查看 EntityManagerFactory.getMetamodel().getEntities()

相关问题