Как создать таблицу без поля @Id весной с помощью jpa? - PullRequest
0 голосов
/ 16 ноября 2018

Я использую весеннюю загрузку и jpa для создания таблицы, но мне нужно создать таблицу без @ Id столбца первичного ключа. Это не дает мне сделать таблицу без этого поля @Id. Как получить это с помощью данных весны jpa?

LetterDoc.java

package com.ashwin.springsecurityangular.model;

import java.io.Serializable;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

import com.fasterxml.jackson.annotation.JsonIgnore;

@Entity
@Table(name = "letter_doc")
public class LetterDoc implements Serializable {

    private static final long serialVersionUID = 1L;

    @ManyToOne(fetch = FetchType.EAGER, optional = false,cascade=CascadeType.PERSIST)
    @JoinColumn(name = "letterNo")
    @JsonIgnore
    private Letter letter;

    @ManyToOne(fetch = FetchType.EAGER, optional = false,cascade=CascadeType.PERSIST)
    @JoinColumn(name = "documentId")
    @JsonIgnore
    private Document document;

    private String docFile;

//i omitted getters and setters and both constructor
}

Он спрашивает меня о необходимости поля @Id. Так что есть ошибка вроде:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is org.hibernate.AnnotationException: No identifier specified for entity: com.ashwin.springsecurityangular.model.LetterDoc

В этой таблице меня избегают создавать поле @Id, но оно мне не дает. Как этого добиться?

1 Ответ

0 голосов
/ 16 ноября 2018

В спецификации JPA четко указано, что класс Entity должен иметь уникальный неизменный идентификатор. Однако есть некоторые хаки, которые вы можете попробовать.

1) Для этого используйте UUID.

@Id
@Column(columnDefinition = "BINARY(16)")
private UUID uuid;

2) Создайте DTO / POJO представление полей данных в слое представления, затем выполните собственный запрос SQL, затем сопоставьте набор результатов с вашим классом

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