Hibernate создает собственные отношения на таблице, используя первичный ключ - PullRequest
0 голосов
/ 29 января 2020

database schema

У меня есть эпизод с сущностью

@Id //The unique id.
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private Long id;

@Column(name= "title", unique = false, nullable = false)
private String title;

@Column(name= "description", unique = false, nullable = false)
private String description;

@Column(name= "price", unique = false, nullable = false)
private BigDecimal price;

@OneToOne(cascade = {CascadeType.ALL}, fetch = FetchType.EAGER)
private Image icon;

@OneToOne(cascade = {CascadeType.ALL}, fetch = FetchType.EAGER)
private Image episodeNexus;

private String repositoryGeneratedId;

@JsonIgnore
@ManyToOne(cascade = {CascadeType.ALL}, fetch = FetchType.LAZY)
@JoinColumn(name="webtoon_id")
Webtoon webtoon;

Webtoon

@Id //The unique id of the webtoon. 
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private Long id;

@Column(name= "price", unique = false, nullable = false)
private BigDecimal price;

@OneToOne(cascade = {CascadeType.ALL}, fetch = FetchType.EAGER)
private Image cover;

@OneToOne(cascade = {CascadeType.ALL}, fetch = FetchType.EAGER)
private Image icon;

@Column(name= "title", unique = false, nullable = false)
private String title;

@Column(name= "author_name", unique = false, nullable = false)
private String authorName;

@Column(name= "description", unique = false, nullable = false)
private String description;

@Column(name= "language", unique = false, nullable = false)
private String language;

@Column(name= "company_id", unique = false, nullable = false)
private Long companyId;

@OneToMany(cascade = {CascadeType.ALL}, fetch = FetchType.LAZY, mappedBy="webtoon", orphanRemoval = false)
@Column(name= "user_review", nullable = true)
private List<Review> userReview = new ArrayList<>();

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy="webtoon", orphanRemoval = false)
@CollectionTable(name= "list_of_episodes")
@Fetch(value = FetchMode.SUBSELECT)
private List<Episode> listOfEpisodes = new ArrayList<>();

@OneToOne(fetch = FetchType.EAGER)
private Category category;

@OneToOne(fetch = FetchType.EAGER)
private SubCategory subCategory;


@OneToOne(cascade = {CascadeType.ALL}, fetch = FetchType.EAGER)
@JoinColumn(name = "rating", unique=true, nullable=false)
private Rating rating = new Rating();

private String repositoryGeneratedId;

и изображение

@Id //The unique id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String nexusId;
private String path;
private String name;
private String generatedUniqueId;
private Long size;

Когда я запускаю свое приложение, я замечаю, что Hibernate создает внешний ключ, используя идентификатор. Как это возможно ? Сгенерированный код ниже. Это ограничение CONSTRAINT fkae0gia7g5anc7p031c00mdf7x FOREIGN KEY (id) не должно существовать.

CREATE TABLE public.episode
(
    id bigint NOT NULL,
    description character varying(255) COLLATE pg_catalog."default" NOT NULL,
    price numeric(19,2) NOT NULL,
    repository_generated_id character varying(255) COLLATE pg_catalog."default",
    title character varying(255) COLLATE pg_catalog."default" NOT NULL,
    episode_nexus_id bigint,
    icon_id bigint,
    webtoon_id bigint,
    CONSTRAINT episode_pkey PRIMARY KEY (id),
    CONSTRAINT fkae0gia7g5anc7p031c00mdf7x FOREIGN KEY (id)
        REFERENCES public.episode (id) MATCH SIMPLE
        ON UPDATE NO ACTION
        ON DELETE NO ACTION,
    CONSTRAINT fkeom9w8fbdmqm8j9nkq5hqglia FOREIGN KEY (icon_id)
        REFERENCES public.image (id) MATCH SIMPLE
        ON UPDATE NO ACTION
        ON DELETE NO ACTION,
    CONSTRAINT fksd2jfjxp5puq4cnp4renveldi FOREIGN KEY (episode_nexus_id)
        REFERENCES public.image (id) MATCH SIMPLE
        ON UPDATE NO ACTION
        ON DELETE NO ACTION,
    CONSTRAINT fkthwbcsb0axcklmd5wfhr650b9 FOREIGN KEY (webtoon_id)
        REFERENCES public.webtoon (id) MATCH SIMPLE
        ON UPDATE NO ACTION
        ON DELETE NO ACTION
)
WITH (
    OIDS = FALSE
)

1 Ответ

0 голосов
/ 30 января 2020

Установите hibernate.hbm2ddl.auto значение none в конфигурации Hibernate.

Подробнее см. Автоматизация c генерация схемы в Руководстве пользователя Hibernate.

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