我想创建一个数据库表,其中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'哪个当然行,但我认为可能有更好的方法直接使用主键而不是whereselect?

最佳答案

选择其中一列作为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/

10-10 09:59