Hallo,
ich fange gerade an mich mit Hibernate einzuarbeiten, also bitte nicht schlagen ;)
Ich habe recht viel nach diesem Problem gegoogelt, konnte aber leider dazu nichts finden :(
Ich bekomme folgende Fehlermeldung:
Code:
Exception in thread "main" javax.persistence.PersistenceException: [PersistenceUnit: HH-Manager] Unable to build EntityManagerFactory
at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:892)
at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:56)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:48)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:32)
at CityTest.main(CityTest.java:19)
Caused by: org.hibernate.MappingException: Could not determine type for: java.util.Set, at table: CITY, for columns: [org.hibernate.mapping.Column(STREETS)]
at org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:290)
at org.hibernate.mapping.SimpleValue.isValid(SimpleValue.java:274)
at org.hibernate.mapping.Property.isValid(Property.java:217)
at org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:464)
at org.hibernate.mapping.RootClass.validate(RootClass.java:236)
at org.hibernate.cfg.Configuration.validate(Configuration.java:1193)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1378)
at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:954)
at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:883)
... 4 more
Meine hibernate.cfg.xml:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory name="MySQL-Session">
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.password">MK191183</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost/Test</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.hbm2ddl.auto">create</property>
<mapping class="de.uni_luebeck.hh.tables.address.City"/>
<mapping class="de.uni_luebeck.hh.tables.address.Street"/>
</session-factory>
</hibernate-configuration>
Meine persistence.xml im META-INF Ordner:
Code:
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0">
<persistence-unit name="HH-Manager">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>de.uni_luebeck.hh.tables.address.Street</class>
<class>de.uni_luebeck.hh.tables.address.City</class>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
</properties>
</persistence-unit>
</persistence>
Meine Street.java:
Code:
package de.uni_luebeck.hh.tables.address;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "STREET")
public class Street implements Serializable {
private static final long serialVersionUID = -4358644913473718120L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "ID")
private int id;
@Column(name = "STREETNAME")
private String streetName;
@Column(name = "STREETNUMBER")
private int streetNumber;
@Column(name = "STREETNUMBERADD")
private char streetNumberAddition;
@Column(name = "ZIP")
private int zip;
public Street() {
super();
}
public Street( String streetName, int streetNumber,
char streetNumberAddition, int zip) {
super();
this.streetName = streetName;
this.streetNumber = streetNumber;
this.streetNumberAddition = streetNumberAddition;
this.zip = zip;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getStreetName() {
return streetName;
}
public void setStreetName(String streetName) {
this.streetName = streetName;
}
public int getStreetNumber() {
return streetNumber;
}
public void setStreetNumber(int streetNumber) {
this.streetNumber = streetNumber;
}
public char getStreetNumberAddition() {
return streetNumberAddition;
}
public void setStreetNumberAddition(char streetNumberAddition) {
this.streetNumberAddition = streetNumberAddition;
}
public int getZip() {
return zip;
}
public void setZip(int zip) {
this.zip = zip;
}
}
Meine City.java:
Code:
package de.uni_luebeck.hh.tables.address;
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
@Entity
@Table(name = "CITY")
public class City implements Serializable {
private static final long serialVersionUID = 6321541332453365559L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "ID")
private int id;
@Column(name = "CITY")
private String city;
@Column(name = "STREETS")
private Set<Street> streets = new HashSet<Street>();
public City() {
super();
}
public City(String city, Set<Street> streets) {
super();
this.city = city;
this.streets = streets;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
@OneToMany(targetEntity = Street.class, fetch = FetchType.EAGER)
public Set<Street> getStreets() {
return streets;
}
public void setStreets(Set<Street> streets) {
this.streets = streets;
}
}
Und die Klasse mit der Main-Methode:
Code:
import java.text.ParseException;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import de.uni_luebeck.hh.tables.address.City;
public class CityTest{
private static City getCity1(){
return new City("Hamburg",StreetTest.getStreets());
}
public static void main(String[] args) throws ParseException{
EntityManagerFactory emf = Persistence.createEntityManagerFactory("HH-Manager");
EntityManager em = emf.createEntityManager();
City city = getCity1();
em.persist(city);
em.close();
emf.close();
System.out.println("FERTIG!");
}
}
Wird eigentlich die persistence.xml Datei wirklich benötigt oder lässt sich dies über @nnotationen realisieren?
Wäre äußerst dankbar über jede Hilfe!!!