Hibernate Envers-如何搜索未审核的实体



我存储到数据库实体LOG,它是不可变的(不会更改(,但它包含的其他类(实体(可以更改。我必须用@Audited(我指的是日志(注释这个吗?这会创建额外的历史表,这没有任何意义,因为LOG不能更改,所以它只是在创建重复项。但当我不添加@Audited时,我无法使用AuditReader(AuditQuery(搜索它。。。有人能帮我吗?

示例:

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

传感器或气象站的名称可能会更改,我需要能够在创建LOG时获得原始数据。

编辑:我将尝试更详细地描述我的问题。我正在从气象站的传感器那里得到一些测量结果,气象站有一些传感器。我需要将这些测量值存储到数据库中,以便以后能够读取它们(我称之为"日志"(。测量值不能更改。日志类(实体(具有与weatherStation类的引用(关系船(,weatherStation级具有对多个传感器的引用。有关weatherStation和传感器的一些信息可能会在一段时间内发生变化,如固件版本等。例如,我需要能够在测量时从数据库中获得整个日志类,以便能够在进行测量时检查固件编号。

我想实现类似Log getLogFromDb(Long id(的功能,它将返回日志类,包括测量时的weatherStation信息和测量时的传感器信息。

当我将WeatherStation、Sensor和LOG标记为已审核时,我能够使用Hibernate Envers获得类似的行为。但正如您所看到的,LOG表根本没有改变,所以拥有日志历史表是没有意义的,因为它只包含始终相同的数据。

我希望我的问题现在更清楚了。

我现在就是这样做的:

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);
}

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

相关内容

  • 没有找到相关文章

最新更新