我正在处理现有的事件表:
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
实体,在Event
和EventType
之间添加一个渴望获取的私有多对一关系,将EventType
放在第二级缓存中,并添加一个getter来返回事件类型的名称Event
。这使得它对应用程序的其余部分透明,并且由于二级缓存而不会引起其他选择。
但是,插入起来比较困难,因为您可能不想让您的实体访问会话以使新事件类型持久化。即使这是可以接受的,但我想您还是希望对事件类型名称具有唯一的约束,如果同时创建两个具有相同新事件类型的事件,则可能会使某些事件创建失败。
我将创建一个服务,该服务将基于名称“获取或创建”事件类型。该服务将使用专用事务来创建事件类型,以减少冲突的可能性。每当我需要为事件分配事件类型时,我都会使用该服务(我想应该比读取事件的类型少得多)。
关于java - 如何在Hibernate中映射查找表以获取半静态数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6512277/