Я получил исключение: не удалось определить тип для com.english.learn.entity.Forms. Почему? - PullRequest
0 голосов
/ 05 октября 2019

Я получил исключение при выполнении программы:

Caused by: org.hibernate.MappingException: Could not determine type for: com.english.learn.entity.Forms, at table: words, for columns: [org.hibernate.mapping.Column(forms)]
at org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:486) ~[hibernate-core-5.3.10.Final.jar:5.3.10.Final]
at org.hibernate.mapping.SimpleValue.isValid(SimpleValue.java:453) ~[hibernate-core-5.3.10.Final.jar:5.3.10.Final]
at org.hibernate.mapping.Property.isValid(Property.java:226) ~[hibernate-core-5.3.10.Final.jar:5.3.10.Final]
at org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:624) ~[hibernate-core-5.3.10.Final.jar:5.3.10.Final]
at org.hibernate.mapping.RootClass.validate(RootClass.java:267) ~[hibernate-core-5.3.10.Final.jar:5.3.10.Final]
at org.hibernate.boot.internal.MetadataImpl.validate(MetadataImpl.java:347) ~[hibernate-core-5.3.10.Final.jar:5.3.10.Final]
at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:466) ~[hibernate-core-5.3.10.Final.jar:5.3.10.Final]
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:939) ~[hibernate-core-5.3.10.Final.jar:5.3.10.Final]
at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:57) ~[spring-orm-5.1.9.RELEASE.jar:5.1.9.RELEASE]
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:365) ~[spring-orm-5.1.9.RELEASE.jar:5.1.9.RELEASE]
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:390) ~[spring-orm-5.1.9.RELEASE.jar:5.1.9.RELEASE]
... 110 common frames omitted

Слово класса:

import lombok.Data;

import javax.persistence.*;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;

@Data
@Entity
@Table(name = "words")
public class Word {
    @Id
    private String infinitive;
    private Forms forms;
    private ArrayList<String> generalTranslate;
    private ArrayList nounsTranslate;
    private ArrayList adjectivesTranslate;
    private ArrayList stativeTranslate;
    private ArrayList pronounsTranslate;
    private ArrayList numeralsTranslate;
    private ArrayList verbsTranslate;
    private ArrayList adverbsTranslate;
    private ArrayList collocationsTranslate;
    private ArrayList sentencesTranslate;
    private ArrayList rootWordsTranslate;

    public Word() {
    }

    public Word(String infinitive, Forms forms, ArrayList<String> generalTranslate) {
        this.infinitive = infinitive;
        this.forms = forms;
        this.generalTranslate = generalTranslate;
    }

    @ManyToMany(fetch = FetchType.LAZY,
            cascade = {
                    CascadeType.PERSIST,
                    CascadeType.MERGE
            })
    @JoinTable(name = "word_users",
            joinColumns = {@JoinColumn(name = "user_id")},
            inverseJoinColumns = {@JoinColumn(name = "word_id")})
    private Set<User> users = new HashSet<User>();
}

Формы класса:

import lombok.Data;

@Data
public class Forms {

    String firstSecondSimple;
    String firstSecondSimpleTranscriptionBreatish;
    String firstSecondSimplePronunsiationBreatish;
    String firstSecondSimpleTranscriptionAmerican;
    String firstSecondSimplePronunsiationAmerican;

    String thirdSimple;
    String thirdSimpleTranscriptionBreatish;
    String thirdSimplePronunsiationBreatish;
    String thirdSimpleTranscriptionAmerican;
    String thirdSimplePronunsiationAmerican;

    String past;
    String pastTranscriptionBreatish;
    String pastPronunsiationBreatish;
    String pastTranscriptionAmerican;
    String pastPronunsiationAmerican;

    String participleOne;
    String participleOneTranscriptionBreatish;
    String participleOnePronunsiationBreatish;
    String participleOneTranscriptionAmerican;
    String participleOnePronunsiationAmerican;

    String participleTwo;
    String participleTwoTranscriptionBreatish;
    String participleTwoPronunsiationBreatish;
    String participleTwoTranscriptionAmerican;
    String participleTwoPronunsiationAmerican;

    public Forms() {
    }

    public Forms(String firstSecondSimple, String firstSecondSimpleTranscriptionBreatish, String firstSecondSimplePronunsiationBreatish, String firstSecondSimpleTranscriptionAmerican, String firstSecondSimplePronunsiationAmerican, String thirdSimple, String thirdSimpleTranscriptionBreatish, String thirdSimplePronunsiationBreatish, String thirdSimpleTranscriptionAmerican, String thirdSimplePronunsiationAmerican, String past, String pastTranscriptionBreatish, String pastPronunsiationBreatish, String pastTranscriptionAmerican, String pastPronunsiationAmerican, String participleOne, String participleOneTranscriptionBreatish, String participleOnePronunsiationBreatish, String participleOneTranscriptionAmerican, String participleOnePronunsiationAmerican, String participleTwo, String participleTwoTranscriptionBreatish, String participleTwoPronunsiationBreatish, String participleTwoTranscriptionAmerican, String participleTwoPronunsiationAmerican) {
        this.firstSecondSimple = firstSecondSimple;
        this.firstSecondSimpleTranscriptionBreatish = firstSecondSimpleTranscriptionBreatish;
        this.firstSecondSimplePronunsiationBreatish = firstSecondSimplePronunsiationBreatish;
        this.firstSecondSimpleTranscriptionAmerican = firstSecondSimpleTranscriptionAmerican;
        this.firstSecondSimplePronunsiationAmerican = firstSecondSimplePronunsiationAmerican;
        this.thirdSimple = thirdSimple;
        this.thirdSimpleTranscriptionBreatish = thirdSimpleTranscriptionBreatish;
        this.thirdSimplePronunsiationBreatish = thirdSimplePronunsiationBreatish;
        this.thirdSimpleTranscriptionAmerican = thirdSimpleTranscriptionAmerican;
        this.thirdSimplePronunsiationAmerican = thirdSimplePronunsiationAmerican;
        this.past = past;
        this.pastTranscriptionBreatish = pastTranscriptionBreatish;
        this.pastPronunsiationBreatish = pastPronunsiationBreatish;
        this.pastTranscriptionAmerican = pastTranscriptionAmerican;
        this.pastPronunsiationAmerican = pastPronunsiationAmerican;
        this.participleOne = participleOne;
        this.participleOneTranscriptionBreatish = participleOneTranscriptionBreatish;
        this.participleOnePronunsiationBreatish = participleOnePronunsiationBreatish;
        this.participleOneTranscriptionAmerican = participleOneTranscriptionAmerican;
        this.participleOnePronunsiationAmerican = participleOnePronunsiationAmerican;
        this.participleTwo = participleTwo;
        this.participleTwoTranscriptionBreatish = participleTwoTranscriptionBreatish;
        this.participleTwoPronunsiationBreatish = participleTwoPronunsiationBreatish;
        this.participleTwoTranscriptionAmerican = participleTwoTranscriptionAmerican;
        this.participleTwoPronunsiationAmerican = participleTwoPronunsiationAmerican;
    }
}

Как решить эту проблему?

1 Ответ

0 голосов
/ 06 октября 2019

Я добавил эту аннотацию к форме класса:

@OneToOne(cascade = CascadeType.ALL)
@PrimaryKeyJoinColumn
private Forms forms;

И отредактировал форму класса вот так:

@Getter
@Setter
@Entity
@Table(name = "forms")
public class Forms {

    @Id
    private String firstSecondSimple;

И это работает.

...