1

我有 2 个表,Word 和 State,State 包含 2 个 cols,ID 和 CurrentState,它的 3 个静态行是 1-Active,2-InActive,3-Other Word 是我要添加行的表。它有 4 个列,ID、Value、Description 和 CurrentState。它在 currentState 列上有一个 State 的外键 这是我拥有的工作代码,它创建一个 Word,设置它的 currentState 字段并保持它。

Word word = new Word(); 
word.setValue("someWord");
word.setDescription("some description for this word");      
State state = new State(1,"Active");
word.setState(state);   
worddao.saveOrUpdate(word);

问题是这看起来不太对劲。创建 State 实例的最佳实践是什么,以便我可以创建一个指向有效 State 行的 Word。枚举是这里的一个选项吗?我的意思是我可能会意外地创建一个 ID = 5 的 State 并违反外键约束。我想首先防止这种情况发生。有任何想法吗?

4

1 回答 1

1

执行此操作的安全方法是查找状态对象而不是创建新对象。您可以将实体标记为可缓存,也可以将检索状态的查询标记为可缓存以避免不必要的查询。

Word word = new Word(); 
word.setValue("someWord");
word.setDescription("some description for this word");      
State state = stateDao.findByState("Active")
word.setState(state);   
worddao.saveOrUpdate(word);

主/参考数据表的另一个选项(我通常遵循)是没有数字 ID。只需有一列是它的字符串表示形式,并将其用作外键列。

这样做的好处是,当您查看数据库中的数据时 - 单词表的状态将很容易解释。您无需再进行一次心理查找即可理解数据。

另一个优点是缓存变得更容易。我们只需要缓存实体而不是查询,因为查找总是通过主键。

稍后,如果需要,您可以添加另一个作为显示标签的列。

于 2012-09-10T09:28:26.600 回答