我正在处理现有的事件表:

Event Table:
id    event_type          status    ...
==    ==========          ======
 1    high.temperature    ACCEPTED
 2    missing.invoice     WAITING
 3    missing.invoice     WAITING

当前有数百个event_types和五个状态。该表具有数百万行,我想通过将查找表用于event_type和status来减小其大小。 status很好,因为它具有少量的静态值,但是event_type由外部​​系统控制,有时我的系统会接收带有新值的事件,这些新值必须添加到查找表中。

我相信选择现有的表结构是为了使使用hibernate的映射变得容易,这样做虽然很好,但是会导致大量的冗余。

我想要的是这样的:
Event Table:
id    event_type    status   ...
==    ==========    ======
 1    223           3
 2    245           4
 3    245           4

EventType Table:
event_type    name
==========    ================
223           high.temperature
245           missing.invoice

我的问题是,是否有任何方法可以自动执行对表的插入和选择,从而不必每次为EventType定义Java类并在每次插入Event时都查找适当的EventType?在Java方面,我希望像现在一样将event_type视为纯字符串。

最佳答案

读操作应该不会造成任何问题:创建EventType实体,在EventEventType之间添加一个渴望获取的私有多对一关系,将EventType放在第二级缓存中,并添加一个getter来返回事件类型的名称Event。这使得它对应用程序的其余部分透明,并且由于二级缓存而不会引起其他选择。

但是,插入起来比较困难,因为您可能不想让您的实体访问会话以使新事件类型持久化。即使这是可以接受的,但我想您还是希望对事件类型名称具有唯一的约束,如果同时创建两个具有相同新事件类型的事件,则可能会使某些事件创建失败。

我将创建一个服务,该服务将基于名称“获取或创建”事件类型。该服务将使用专用事务来创建事件类型,以减少冲突的可能性。每当我需要为事件分配事件类型时,我都会使用该服务(我想应该比读取事件的类型少得多)。

关于java - 如何在Hibernate中映射查找表以获取半静态数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6512277/

10-10 02:35