我想创建一个数据库表,其中iso2代码映射到它们的iso3等效代码,例如:DE <-> DEU
德国:
@Entity
public class LanguageCode {
@Id
private String iso2;
@Id
private String iso3;
private String countryName;
}
我想能向上看两个方向:
dao.findByIso3("DEU"); //returns DE
dao.findByIso2("DE"); //returns DEU
如果可能的话,我怎么能做到这一点。如何查询作为主键的两个表?
此外,每个iso2+iso3代码必须是唯一的。
问题是:如果只有iso2是
@Id
,我可以使用dao.find(iso2)
,因为2个字母的代码充当主键。但是如果我有一个组合键iso2+iso3,我不能像这样查询它,因为我只能查询组合键。
所以我必须使用
SELECT .. FROM .. WHERE iso3 = 'DEU'
哪个当然行,但我认为可能有更好的方法直接使用主键而不是where
select? 最佳答案
选择其中一列作为PK,并使另一列“just”唯一:
create table language_codes
(
iso3 text not null primary key,
iso2 text not null unique,
country_name text not null
);
唯一的列就是所谓的“备用键”。
关于java - 如何在数据库中保存双向 map ?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29518212/