Подтвердить что ты не робот

Идентификатор объекта JPA - длинный или длинный

Должен ли идентификатор вашего объекта быть длинным (примитивный тип) или длинным (тип объекта)?

  • Идентификатор является основным ключом моей таблицы и никогда не "null" в базе данных.
  • Мои сотрудники предлагают использовать объект типа Long.
  • Инструмент обратной обработки Hibernate по умолчанию генерирует примитивный тип long для id.

Что выбрать? длинный или длинный?

@Entity
@Table(name = "COUNTRY")
public class CountryEntity implements java.io.Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @Column(name = "ID")
    private long id;
    @Column(name = "NAME")
    private String name;
    @Column(name = "CURRENCY")
    private String currency;
    @Column(name = "PEOPLE")
    private Long people;
    @Column(name = "SIZE")
    private Long size;

    public CountryEntity() {
    }
4b9b3361

Ответ 1

Я считаю, что Long лучше, поскольку правильнее проверять, имеет ли сущность постоянную идентификацию, проверяя значение null (в MySQL вы можете иметь идентификатор значения 0). Также некоторые библиотеки, такие как Spring, основываются на идентификаторе типа Long (по умолчанию) в своей логике. См. Эту реализацию для примера.

Небольшое преимущество примитива: оно занимает немного меньше места.

PS: Оба являются правильными и поддерживаются в соответствии со спецификацией JPA, и ответы на этот вопрос как-то основаны на мнениях.

Ответ 2

Я бы предпочел Лонг по той простой причине, что если вы позволите базе данных генерировать идентификаторы для вас (что вам нужно), вы можете сказать, что недавно созданный объект CountryEntity еще не сохраняется, проверяя id==null. Если вы используете long, тогда id всегда будет иметь ненулевое значение (изначально 0), которое изменится при сохранении объекта.