JPA Lookup表设计

时间:2011-11-07 11:51:50

标签: design-patterns jpa lookup-tables

我手上有设计困境,我希望你们可以帮我解决这个问题。

问题: 我的应用程序有大约15个查找表,每个查找表都有代码和值属性。我想知道创建这些查找表的最佳设计方法是什么。

我脑子里有几个解决方案

  1. 使用代码创建一个抽象超类(例如 BaseLookupTable ) 和 value 属性,然后继续创建扩展此类的15个专用查找类。或
  2. 为15个查找表中的每一个创建枚举类型。
  3. 如果你们可以帮我挑选一个解决方案(即使是我没有提到过的解决方案)以及这样做的理由,我们将不胜感激。

    干杯, 萨曼斯

2 个答案:

答案 0 :(得分:1)

我会选择选项1,因为枚举已在您的代码中修复。如果要在查找表中添加选项,只需将其插入数据库即可。使用枚举,您需要重新编译您的应用程序。

答案 1 :(得分:0)

我认为普通的JPA基类没有那么多用途。

假设您没有为公共键/值接口建模,那么为什么不将具体语义编码到查找表列名中,例如role_name,status_code等?

不确定您是否也在使用数据库ENUM,例如 MySQL ENUMs 。我假设这是为下一段(它是MySQL特定的)。其他DBMS如PostgreSQL有非冗余的ENUM,因此以下可能并不适用于您的情况:

无论如何,MySQL ENUM都无法应用于所有情况。如果查找值是单值的,并且基本上仅从一个表/实体引用,则应使用MySQL ENUM。我的策略是如果从多个其他表引用值或查找表需要多个属性,则添加单独的查找表。请注意,在DB中使用相同的ENUM定义会增加冗余。使用MySQL ENUM可以为您保存表,连接和一些关系。请记住,DB ENUM的值应尽可能静态。如果需要更改,请再次使用查找表。

老实说这不是一个简单的话题,我不得不分享我对这个主题的看法,即使这包括MySQL细节。