Проблема JPA, использование первичного ключа родительского объекта для первичного ключа дочернего объекта - PullRequest
0 голосов
/ 20 февраля 2019

В настоящее время я разрабатываю свой проект под Spring с JPA.

Прежде всего, вот моя схема базы данных для справочной информации

Database Schema

Итак, я испытываю трудности, когда пытаюсь использовать history_id HISTORY в качестве первичного ключа TAG.Это дает мне ошибку ...Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: This class [class com.wrapsody.demo.HistoryTag] does not define an IdClass.

Поэтому я добавил @IdClass(HistoryTag.HistoryTagAssignId.class) в свой HistoryTag.java

 @NoArgsConstructor(access = AccessLevel.PROTECTED)  @Data @Entity
 @IdClass(HistoryTag.HistoryTagAssignId.class)  
 public class HistoryTag implements Serializable {
     @Id
     @ManyToOne
     private History history;

     @Column
     private String tagName;

     @Builder
     public HistoryTag(String tagName) {
         this.tagName = tagName;
     }

     @NoArgsConstructor
     public static class HistoryTagAssignId implements Serializable {
         private History history;

         public HistoryTagAssignId(History history) {
             this.history = history;
         }
     } 
}

Для справки, это History.java

@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Data
@Entity
public class History {
    @Id
    @GeneratedValue
    private Long historyId;

    @Column
    private String historyMaterName;

    @Column
    private String historyFreeSetName;

    History(String historyMaterName, String historyFreeSetName) {
        this.historyMaterName = historyMaterName;
        this.historyFreeSetName = historyFreeSetName;
    }
}

Любое руководство по решению этой ошибкисообщение приветствуется.Спасибо!

1 Ответ

0 голосов
/ 22 февраля 2019

Для таблицы тегов вам не нужен класс сущностей.Его можно использовать в истории с:

  @ElementCollection
  @CollectionTable(
        name="TAG",
        joinColumns=@JoinColumn(name="HISTORY_ID")
  )
  @Column(name="TAG_NAME")   
  List<String> tags;

https://en.wikibooks.org/wiki/Java_Persistence/ElementCollection#Basic_Collections

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