【发布时间】:2015-03-30 16:36:16
【问题描述】:
我一直在阅读一些关于在 MySql 中使用复合键的文章,发现 composite key can't own a auto_increment id column.但是,我有兴趣使用类似的功能。让我们解释一下:
使用 MariaDB 10 (InnoDB) 和 Hibernate 3.6.9
我想做一些可翻译的应用程序表字段。我认为只有一张翻译表就足够了。这个表有一个复合键,它有一个 int 值作为翻译的键,还有具体文本的语言环境值。相同的 id 和 locale 值不能作为条目放置。
这就是模型的样子:
我不希望将每个随机实体作为集合加载翻译,我正在考虑像String translationFor(Integer id, Locale loc) 这样的方法可以为我当前的语言环境做到这一点。但是,当我保存一些翻译集时,我想为它们分配相同的 ID。让我们来看看这个案例:
- 西班牙语: Cuchara
- 英语:勺子
表格应如下所示:
id locale translation
1 es Cuchara
1 en Spoon
但我不能告诉 MySql 有一个带有 auto_increment 列的复合 id。所以,我认为我应该手动分配它,执行以下步骤:
- 使用语言环境值构建
Translation实体 - 在 Hibernate 会话中开始事务
- 检索
translations表中的最后一个id值 - 手动将其分配给实体
- 保存它们
- 提交事务
这是最合适的方式吗?我是在原子操作吗?
【问题讨论】: