Spring Data JPA, разделить сущности над проектами, несопоставленная сущность - PullRequest
0 голосов
/ 16 ноября 2018

У меня есть пара сервисов, которые используют одну и ту же форму таблицы для хранения переводов, поэтому я переместил сущность перевода в общий проект и попытался создать однонаправленное отображение @OneToMany для этой сущности. Однако я продолжаю получать следующие исключения Caused by: org.hibernate.AnnotationException: Use of @OneToMany or @ManyToMany targeting an unmapped class: com.examples.blog.Post.translations[com.examples.shared.domain.Translation]

мой класс Post выглядит следующим образом

package com.examples.blog.domain;

import com.examples.shared.domain.Translation;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.GenericGenerator;

import javax.persistence.*;
import java.io.Serializable;
import java.util.List;

@Data
@Entity
@Table(name = "POSTS")
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Currency implements Serializable {

    @Id
    @GeneratedValue(generator = "system-uuid")
    @GenericGenerator(name = "system-uuid", strategy = "uuid")
    private String id;

    private String author;

    @Embedded
    private Source source;

    @OneToMany(cascade = CascadeType.ALL,
        orphanRemoval = true)
    @JoinColumn(name = "entity_id")
    List<Translation> translations;

}

и мой общий класс перевода выглядит так:

package com.examples.shared.domain;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.GenericGenerator;

import javax.persistence.*;
import java.io.Serializable;

@Entity
@Table(name = "TRANSLATIONS")
@Data
@Builder(toBuilder = true)
@NoArgsConstructor
@AllArgsConstructor
public class Translation implements Serializable {

    @Id
    @GeneratedValue(generator = "system-uuid")
    @GenericGenerator(name = "system-uuid", strategy = "uuid")
    private String id;

    @Column(name = "language")
    private String language;

    @Column(name="translation")
    private String translation;

    @Column(name="entity_id")
    @ManyToOne
    private String entityId;

}

Кто-нибудь может помочь мне понять, что я здесь делаю неправильно?

Ответы [ 3 ]

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

Вы отображаете 2-й класс в onetomany в одном классе, но отображаете manytoone в строку вместо класса.

Измените

@ManyToOne
private String entityId;

на

@ManyToOne
private Currency entityId;

См. это

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

Похоже, что hibernate не знает о com.examples.shared.domain.Translation сущности. Вы должны предоставить hibernate список классов или пакетов, в которых он должен искать @Entities classes.

Если вы используете Spring Boot, используйте @EntityScan(basePackages="com.examples.shared.domain").

Если вы используете Spring + Hibernate интеграция, используйте LocalContainerEntityManagerFactoryBean.setPackagesToScan("com.examples.shared.domain")

Если вы используете обычный режим гибернации, добавьте соответствующую запись в persistence.xml или hibernate.cfg.xml :

<hibernate-configuration>
    ....
    <mapping class="com.examples.shared.domain.Translation"/>
 </session-factory>
</hibernate-configuration>

Или для конфигурации Java см. Документы: http://docs.jboss.org/hibernate/orm/5.3/userguide/html_single/Hibernate_User_Guide.html#bootstrap-bootstrap-native-registry-MetadataSources-example

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

Приведенный ниже оператор вызывает у вас проблему:

  @Column(name="entity_id")
    @ManyToOne
    private String entityId;

Вместо String entityId следует указать связь с допустимым классом сущностей.Здесь entityId имеет тип String, который явно не является объявленной сущностью.

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