Как отобразить разные коды стран / штатов в базовый объект с помощью аннотаций JPA? - PullRequest
0 голосов
/ 06 мая 2018

У меня есть объект со следующими полями:

private Date dateOfBirth;
private String cityOfBirth;
private Long birthStateCodeId;
private Long birthCountryCodeId;
private Boolean isUSCitizen;
private Long citizenshipCountryCodeId;
private String address1;
private String address2;
private String addressCity;
private Long addressStateCodeId;
private Long addressCountryCodeId;
private String postalCode;

Как видно из приведенного фрагмента, у меня есть

  • 2 свойства ( birthStateCodeId , addressStateCodeId ), где я использую код состояния из таблицы StateCodes и
  • 3 свойства ( birthCountryCodeId, гражданствоCountryCodeId и addressCountryCodeId ), где я использую код страны из таблицы CountryCodes.

Используя JPA (с Hibernate в качестве поставщика постоянства), как мне сопоставить 5 вышеуказанных свойств (2 кода состояния и 3 кода страны) с двумя отдельными таблицами StateCodes и CountryCodes?

1 Ответ

0 голосов
/ 10 мая 2018

Вы можете достичь этого так:

@Entity
public class PersonIdentification {
    // primary key
    @Id // and other annotations, see JPA Spec or tutorials
    private long id;

    // regular attributes
    private Date dateOfBirth;
    private String cityOfBirth;
    private Boolean isUSCitizen;
    private String address1;
    private String address2;
    private String addressCity;
    private String postalCode;

    @ManyToOne
    private StateCode birthStateCode;
    @ManyToOne
    private StateCode addressStateCode;

    @ManyToOne
    private CountryCode birthCountryCode;
    @ManyToOne
    private CountryCode addressCountryCode;
    @ManyToOne
    private CountryCode citizenshipCountryCode;

    // setter & getter methods as needed...
}

Затем определите классы сущностей для обоих типов «Код» как:

@Entity
public class StateCode {
    // primary key
    @Id // and other annotations, see JPA Spec or tutorials
    private long id;

    private String code;
    private String stateName;

    // other attributes of interest

    // setter & getter methods as needed...
}

@Entity
public class CountryCode {
    // primary key
    @Id // and other annotations, see JPA Spec or tutorials
    private long id;

    private String code;
    private String countryName;

    // other attributes of interest

    // setter & getter methods as needed...
}

Чтобы уменьшить CnP-код (как в случае общего аспекта обработки первичного ключа (@Id), вы можете проверить этот ответ . Он дает подробные советы о том, как более эффективно обрабатывать такие случаи, вводя AbstractEntity через аннотацию @MappedSuperClass.

Надеюсь, это поможет

...