Я пытаюсь сделать домашнюю работу заранее, но немного застрял.Прямо сейчас я просто пытаюсь продвинуться дальше в проекте, поскольку у меня нет идей, как решить эту ошибку.
Я попытался поиграться с @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
Я не сократил код, поскольку я нене знаю, с чем связана ошибка.Буду признателен за любую помощь, будь то направление, в которое можно заглянуть, или иначе.