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!!!