Как создать и обработать составной первичный ключ в JPA

Я хочу иметь версии из одного и того же ввода данных. Другими словами, я хочу дублировать запись с другим номером версии.

id - Version будет основным ключом.

Как должен выглядеть объект? Как я могу дублировать его с другой версией?

 id Version ColumnA 1 0 Some data 1 1 Some Other data 2 0 Data 2. Entry 2 1 Data 

Вы можете создать Embedded class , содержащий два ваших ключа, а затем ссылку на этот class как EmbeddedId в свой Entity .

Вам @Embeddable annotations @EmbeddedId и @Embeddable .

 @Entity public class YourEntity { @EmbeddedId private MyKey myKey; @Column(name = "ColumnA") private String columnA; /** Your getters and setters **/ } 
 @Embeddable public class MyKey implements Serializable { @Column(name = "Id", nullable = false) private int id; @Column(name = "Version", nullable = false) private int version; /** getters and setters **/ } 

Другой способ достичь этой задачи – использовать аннотацию @IdClass и поместить оба id в этот IdClass . Теперь вы можете использовать стандартную аннотацию @Id для обоих атрибутов

 @Entity @IdClass(MyKey.class) public class YourEntity { @Id private int id; @Id private int version; } 

 public class MyKey implements Serializable { private int id; private int version; } 

Класс MyKey должен реализовывать Serializable если вы используете @IdClass

Ключевой class:

 @Embeddable @Access (AccessType.FIELD) public class EntryKey implements Serializable { public EntryKey() { } public EntryKey(final Long id, final Long version) { this.id = id; this.version = version; } public Long getId() { return this.id; } public void setId(Long id) { this.id = id; } public Long getVersion() { return this.version; } public void setVersion(Long version) { this.version = version; } public boolean equals(Object other) { if (this == other) return true; if (!(other instanceof EntryKey)) return false; EntryKey castOther = (EntryKey) other; return id.equals(castOther.id) && version.equals(castOther.version); } public int hashCode() { final int prime = 31; int hash = 17; hash = hash * prime + this.id.hashCode(); hash = hash * prime + this.version.hashCode(); return hash; } @Column (name = "ID") private Long id; @Column (name = "VERSION") private Long operatorId; } 

Класс сущности:

 @Entity @Table (name = "YOUR_TABLE_NAME") public class Entry implements Serializable { @EmbeddedId public EntryKey getKey() { return this.key; } public void setKey(EntryKey id) { this.id = id; } ... private EntryKey key; ... } 

Как я могу дублировать его с другой версией?

Вы можете отделить объект, который извлекается у поставщика, изменить ключ Entry и затем сохранить его как новый объект.

Класс MyKey (@Embeddable) не должен иметь никаких отношений, таких как @ManyToOne

При использовании annotations @IdClass еще один отзыв, который я нашел, – это аннотация @Column должна входить в поля classа Entity ( YourEntity в образце кода RohitJan).

  • Реализация пользовательских методов хранилища Spring Data и их просмотр через REST
  • В чем разница между контекстом Persistence с областью действия и контекстом Extended Persistence?
  • @PreUpdate и @Prepersist в спящем / JPA (с использованием сеанса)
  • Борьба за понимание правильного использования EntityManager
  • Поддержка JPA для Java 8 новых API даты и времени
  • При использовании методов getOne и findOne Spring Data JPA
  • setMaxResults для annotations Spring-Data-JPA?
  • Создание отношения OneToOne к ленивому
  • JPA @ManyToOne с CascadeType.ALL
  • Hibernate / JPA ManyToOne против OneToMany
  • Решить проблему Liby-Hibernate с помощью hibernate.enable_lazy_load_no_trans
  • Interesting Posts

    Эквивалент AutoHotKey на Mac

    Роллинг соединяется на data.table с дублирующимися ключами

    Получение шаблонов / файлов Facelets из внешней файловой системы или базы данных

    Как открыть несколько окон при запуске Outlook 2010?

    «ab» программа зависает после множества запросов, почему?

    Защитить .NET-код от обратной инженерии?

    У меня есть 32-разрядная или 64-разрядная версия?

    Valgrind не показывает номера строк, несмотря на флаг -g (на Ubuntu 11.10 / VirtualBox)

    JSONObject – Как получить значение?

    Запросить модуль, как правильно получить ударные символы?

    Конкатентные скрипты в порядке с Gulp

    Сравнение Java с == двух строк является ложным?

    Java BigDecimal.power (BigDecimal exponent): Есть ли библиотека Java, которая это делает?

    Создание новой папки или файла с помощью проводника в Windows 7 не отображается в проводнике до тех пор, пока не будет нажата кнопка Обновить или F5

    Как сохранить символы новой строки в атрибуте XML?

    Давайте будем гением компьютера.