Java 如何在Hibernate中映射半静态数据的查找表

Java 如何在Hibernate中映射半静态数据的查找表,java,sql,oracle,hibernate,normalization,Java,Sql,Oracle,Hibernate,Normalization,我正在处理一个现有的事件表: Event Table: id event_type status ... == ========== ====== 1 high.temperature ACCEPTED 2 missing.invoice WAITING 3 missing.invoice WAITING 目前有几百种事件类型和五种状态。这个表有数百万行,我想通过使用事件类型和状态的查找表来减小

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

Event Table:
id    event_type          status    ...
==    ==========          ======
 1    high.temperature    ACCEPTED
 2    missing.invoice     WAITING
 3    missing.invoice     WAITING
目前有几百种事件类型和五种状态。这个表有数百万行,我想通过使用事件类型和状态的查找表来减小它的大小。状态很好,因为它有少量静态值,但事件类型由外部系统控制,我的系统有时会接收到带有新值的事件,这些新值必须添加到查找表中

我相信,选择现有的表结构是为了简化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类,也不必每次插入EventType时都查找相应的EventType?在java方面,我更愿意将事件类型视为一个普通字符串,就像现在一样。

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

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

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

谢谢您的帮助。“获取或创建”服务正是我所想的,但我希望我能找到一种更自动的方式来进行这些更新,也许是一些神奇的Oracle功能,可以基于FK为我插入到查找表中。