Вопрос новичка.Невозможно построить Hybernate SessionFactory: MappingException: не удалось определить тип для - PullRequest
0 голосов
/ 27 апреля 2019

Я пытаюсь сделать домашнюю работу заранее, но немного застрял.Прямо сейчас я просто пытаюсь продвинуться дальше в проекте, поскольку у меня нет идей, как решить эту ошибку.

Я попытался поиграться с @ElementCollection, @ManyToOne, @OneToMany,и т.д., но это, кажется, просто вызывает дополнительные ошибки.Я действительно не знаю, где искать.

import java.util.Date;
import javax.persistence.*;
import javax.validation.constraints.NotNull;

@Entity
public class Buchung {
    static int id = 1;

    @Id 
    @Column(name="ID_Reservation")
    @NotNull
    int idReservation;

    @Column(name="Kunde_ID")
    @NotNull
    @JoinColumn(name= "Kunde_ID")
    Kunde kunde;

    @Column(name="Flug_ID")
    @NotNull
    @JoinColumn(name= "Flugname")
    Flug flug;

    @Column(name="Reservation_Seats_taken")
    @NotNull
    int gebuchteplaetzeimflug = 1;

    @NotNull
    @Column(name="Date")
    @Temporal(TemporalType.DATE)
    Date buchungDatum;

    Buchung(Kunde kunde, Flug flug, Date buchungDatum) {
        if (buchungDatum != null) {
            this.kunde = kunde;
            this.buchungDatum = buchungDatum;
            this.flug = flug;
            this.idReservation = id;
            id++;
        } else {
            throw new IllegalArgumentException();
        }
    }
}
import java.sql.Time;
import javax.persistence.*;
import javax.validation.constraints.NotNull;

@Entity
public class Flug {
    @Id
    @NotNull
    @Column(name="Flugname")
    String nummer;

    @NotNull
    @Column(name="Flugstart")
    //@Temporal(TemporalType.TIME)
    Time startzeit;

    @NotNull
    @Column(name="Startflughafen")
    String startflughafen;

    /**Constructor
     * @param nummer Flight number
     * @param startzeit
     * @param startflughafen
     */
    Flug(String nummer, Time startzeit, String startflughafen) {
        if(nummer != null && startzeit != null && startflughafen != null) {
            this.nummer = nummer;
            this.startzeit = startzeit;
            this.startflughafen = startflughafen;
        } else {
            throw new IllegalArgumentException();
        }
    }
}
import java.util.ArrayList;
import javax.persistence.*;
import javax.validation.constraints.NotNull;

@Entity
public class Kunde {
    static int id = 1;

    @Id 
    @Column(name="Kunde_ID")
    @NotNull
    int idClient;

    @Column(name="Kunde_Vorname")
    @NotNull
    String vorname;

    @Column(name="Kunde_Nachname")
    @NotNull
    String nachname;

    @Column(name="Kunde_Email")
    @NotNull
    String email;

    @Transient
    ArrayList<Buchung> buchungen = new ArrayList<Buchung>();

    /**Constructor
     * @param vorname
     * @param nachname
     * @param email
     */
    Kunde(String vorname, String nachname, String email) {
        if(vorname != null && nachname != null && email != null) {
            this.vorname = vorname;
            this.nachname = nachname;
            this.email = email;
            this.idClient = id;
            id++;
        } else {
            throw new IllegalArgumentException();
        }
    }

    void buchungHinfuegen(Kunde andereKunde, Buchung buchung) {
        if (andereKunde.buchungen.size() != 0) {
            for(int k = andereKunde.buchungen.size(); k > 0; k--) {
                if (andereKunde.buchungen.get(k - 1) == buchung) {
                    buchung.gebuchteplaetzeimflug++;
                }
            }
        }
        buchungen.add(buchung);
    }
}
import java.sql.Date;
import java.sql.Time;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

public class JPAApplication {
    private EntityManagerFactory entityManagerFactory;

    public JPAApplication() {
        Logger.getLogger("org.hibernate").setLevel(Level.ALL);
        entityManagerFactory = Persistence.createEntityManagerFactory("DB1");
    }

    public void testFlights() {
                EntityManager em= entityManagerFactory.createEntityManager();
                em.getTransaction().begin();
                Kunde ersteKunde = new Kunde("Kiro", "Betona", "kirobetona@gmail.com");
                Kunde zweiteKunde = new Kunde("Gosho", "Asfalta", "goshoasfalta@gmail.com");
                Flug ersteFlug = new Flug("F1", new Time(123), "Frankfurt");
                Flug zweiteFlug = new Flug("F2", new Time(123456), "Berlin");
                Flug dritteFlug = new Flug("F3", new Time(123456789), "Stolipinovo");

                ersteKunde.buchungHinfuegen(zweiteKunde, new Buchung(ersteKunde, ersteFlug, new Date(534634576)));

                Buchung doubleBuchung = new Buchung(ersteKunde, zweiteFlug, new Date(65435437));
                ersteKunde.buchungHinfuegen(zweiteKunde, doubleBuchung);
                zweiteKunde.buchungHinfuegen(ersteKunde, doubleBuchung);
                zweiteKunde.buchungHinfuegen(ersteKunde, new Buchung(ersteKunde, dritteFlug, new Date(5432634)));
                em.persist(doubleBuchung);
    }

    public static void main(String[] args) {
        JPAApplication app = new JPAApplication();
        app.testFlights();
    }
}

ОШИБКА:

Apr. 27, 2019 10:49:15 NACHM. org.hibernate.dialect.Dialect <init>
INFO: HHH000400: Using dialect: org.hibernate.dialect.Oracle12cDialect
Exception in thread "main" javax.persistence.PersistenceException: [PersistenceUnit: DB1] Unable to build Hibernate SessionFactory
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.persistenceException(EntityManagerFactoryBuilderImpl.java:1015)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:941)
    at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:56)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:79)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54)
    at de.hska.iwii.db1.jpa.JPAApplication.<init>(JPAApplication.java:17)
    at de.hska.iwii.db1.jpa.JPAApplication.main(JPAApplication.java:41)
Caused by: org.hibernate.MappingException: Could not determine type for: de.hska.iwii.db1.jpa.Flug, at table: Buchung, for columns: [org.hibernate.mapping.Column(Flug_ID)]
    at org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:486)
    at org.hibernate.mapping.SimpleValue.isValid(SimpleValue.java:453)
    at org.hibernate.mapping.Property.isValid(Property.java:226)
    at org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:624)
    at org.hibernate.mapping.RootClass.validate(RootClass.java:267)
    at org.hibernate.boot.internal.MetadataImpl.validate(MetadataImpl.java:343)
    at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:461)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:938)
    ... 5 more

Я не сократил код, поскольку я нене знаю, с чем связана ошибка.Буду признателен за любую помощь, будь то направление, в которое можно заглянуть, или иначе.

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