MySQL MySQL - Hibernate gibt Fehler aus

Crashbreaker

Mitglied
Hallo Leute,

da ich Neuling was Hibernate betrifft, hoffe ich doch sehr um eure Unterstützung.

Ich nutze die Datenbank MySQL-InnoDB und habe meine Tabellen wie folgt realisiert, siehe Foto:

DB-MySQLInnoDB-CRM.png



Zu erst wollte ich die Tabellen "Personnel" und "Denomination" N:M verknüpfen (siehe Foto rechts oben und Mitte) ....

Dazu habe ich in Java die Klassen folgender weise geschrieben:

Klasse-Personnel:
Java:
import java.util.ArrayList;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;

import org.hibernate.annotations.Parameter;
import org.hibernate.annotations.Type;

import de.isa.Sex;

@Entity
public class Personnel {

	private int idPersonnel;
	private String Firstname;
	private String Lastname;
	private Sex Sex;
	private Double BodySize;
	private Double Weight;
	private List<Denomination> Denominations = new ArrayList<Denomination>();
	private Salutation Salutation;

	public Personnel() {
		super();
	}

	public Personnel(int idPersonnel, String firstname, String lastname,
			Sex sex, Double bodySize, Double weight) {
		super();
		this.idPersonnel = idPersonnel;
		Firstname = firstname;
		Lastname = lastname;
		Sex = sex;
		BodySize = bodySize;
		Weight = weight;
	}

	public Personnel(String firstname, String lastname, Sex sex,
			Double bodySize, Double weight) {
		super();
		Firstname = firstname;
		Lastname = lastname;
		Sex = sex;
		BodySize = bodySize;
		Weight = weight;
	}

	@Id
	@GeneratedValue
	public int getIdPersonnel() {
		return idPersonnel;
	}

	public void setIdPersonnel(int idPersonnel) {
		this.idPersonnel = idPersonnel;
	}

	public String getFirstname() {
		return Firstname;
	}

	public void setFirstname(String firstname) {
		Firstname = firstname;
	}

	public String getLastname() {
		return Lastname;
	}

	public void setLastname(String lastname) {
		Lastname = lastname;
	}

	@Column(name = "Sex", columnDefinition = "integer", nullable = true)
	@Type(type = "de.isa.util.GenericEnumUserType", parameters = {
			@Parameter(name = "enumClass", value = "de.isa.entities.Personnel$Sex"),
			@Parameter(name = "identifierMethod", value = " toInt"),
			@Parameter(name = "valueOfMethod", value = "fromInt") })
	public Sex getSex() {
		return Sex;
	}

	public void setSex(Sex sex) {
		this.Sex = sex;
	}

	public Double getBodySize() {
		return BodySize;
	}

	public void setBodySize(Double bodySize) {
		BodySize = bodySize;
	}

	public Double getWeight() {
		return Weight;
	}

	public void setWeight(Double weight) {
		Weight = weight;
	}

	@ManyToMany
	@JoinTable(
		name = "Personnel_has_Denomination", 
		joinColumns = {
			@JoinColumn(name = "Personnel_idPersonnel"),
			@JoinColumn(name = "Personnel_Department_idDepartment"),
			@JoinColumn(name = "Personnel_Salutation_idSalutation") 
		}, 
		inverseJoinColumns = { 
			@JoinColumn(name = "Denomination_idDenomination") 
		}
	)
	public List<Denomination> getDenominations() {
		return Denominations;
	}

	public void setDenominations(List<Denomination> denominations) {
		Denominations = denominations;
	}

	@ManyToOne
	@JoinColumn(name="Salutation_idSalutation")
	public Salutation getSalutation() {
		return Salutation;
	}

	public void setSalutation(Salutation salutation) {
		Salutation = salutation;
	}
	
}


Klasse-Sex:
Java:
public enum Sex {
	MALE(1), FEMALE(2), UNKNOW(3);

	private int value;

	private Sex(int value) {
		this.value = value;
	}

	// the identifierMethod
	public int toInt() {
		return value;
	}

	// the valueOfMethod
	public static Sex fromInt(int value) {
		switch (value) {
		case 1:
			return MALE;
		case 2:
			return FEMALE;

		default:
			return UNKNOW;
		}
	}

	public String toString() {
		switch (this) {
		case MALE:
			return "Male";
		case FEMALE:
			return "Female";

		default:
			return "UNKNOW";
		}
	}
}


Klasse-Denomination:
Java:
import java.util.ArrayList;
import java.util.List;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;

@Entity
public class Denomination {

	private int idDenomination;
	private String GorgeOtten;
	private String Type;
	private String Size;
	private String Color;
	private String Description;
	private List<Personnel> Personnels = new ArrayList<Personnel>();
	
	public Denomination() {
		super();
	}

	public Denomination(int idDenomination, String gorgeOtten, String type,
			String size, String color, String description) {
		super();
		this.idDenomination = idDenomination;
		GorgeOtten = gorgeOtten;
		Type = type;
		Size = size;
		Color = color;
		Description = description;
	}

	public Denomination(String gorgeOtten, String type, String size,
			String color, String description) {
		super();
		GorgeOtten = gorgeOtten;
		Type = type;
		Size = size;
		Color = color;
		Description = description;
	}

	@Id
	@GeneratedValue
	public int getIdDenomination() {
		return idDenomination;
	}

	public void setIdDenomination(int idDenomination) {
		this.idDenomination = idDenomination;
	}

	public String getGorgeOtten() {
		return GorgeOtten;
	}

	public void setGorgeOtten(String gorgeOtten) {
		GorgeOtten = gorgeOtten;
	}

	public String getType() {
		return Type;
	}

	public void setType(String type) {
		Type = type;
	}

	public String getSize() {
		return Size;
	}

	public void setSize(String size) {
		Size = size;
	}

	public String getColor() {
		return Color;
	}

	public void setColor(String color) {
		Color = color;
	}

	public String getDescription() {
		return Description;
	}

	public void setDescription(String description) {
		Description = description;
	}

	@ManyToMany
	@JoinTable(
		name="Personnel_has_Denomination",
		joinColumns={
			@JoinColumn(name="Denomination_idDenomination")
		},
		inverseJoinColumns={
			@JoinColumn(name="Personnel_idPersonnel"),
			@JoinColumn(name="Personnel_Department_idDepartment"),
			@JoinColumn(name="Personnel_Salutation_idSalutation")
		}
	)
	public List<Personnel> getPersonnels() {
		return Personnels;
	}

	public void setPersonnels(List<Personnel> personnels) {
		Personnels = personnels;
	}
	
	
}


So und nun, wenn ich eine Testklasse schreibe um das zu testen, dann bekomme ich eine Fehlermeldung...

Meine Testklasse sieht so aus:

Java:
public class TestPersonnel {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		//Salutation anrede = new Salutation("Herr");
				
		Denomination jeans = new Denomination("Jeans", "Typ", "36", "schwarz", "Beschreibung");
		Denomination jacke = new Denomination("Jacke", "typ", "XXL", "schwarz", "Security Jacke");
		Denomination rock = new Denomination("Rock", "mini", "32", "rot", "Security Rock");
		Denomination bh = new Denomination("BH", "BH-XYZ", "85D", "rot", "Security BH");
		
		Personnel hans = new Personnel("Hans", "Meiser", Sex.MALE, 1.84, 95.6);
		Personnel ayse = new Personnel("Ayse", "Soyatli", Sex.FEMALE, 1.68, 53.7);
		
		hans.getDenominations().add(jacke);
		hans.getDenominations().add(jeans);
		//hans.setSalutation(anrede);
		
		ayse.getDenominations().add(rock);
		ayse.getDenominations().add(bh);
		
		PersonnelDAO personnelDAO = new PersonnelDAO();
		personnelDAO.createPersonnel(hans);
		personnelDAO.createPersonnel(ayse);
		
		
		// Ausgabe
		//Personnel personnelResult = personnelDAO.getPersonnelById(new Integer(2));
		
		//System.out.println("Personnel-Firstname: " + personnelResult.getFirstname());

	}

}

Die Fehlermeldung sieht so aus:

00:01:46,519 INFO EntityBinder:422 - Bind entity de.isa.entities.Denomination on table Denomination
00:01:46,524 INFO AnnotationBinder:419 - Binding entity from annotated class: de.isa.entities.Salutation
00:01:46,525 INFO EntityBinder:422 - Bind entity de.isa.entities.Salutation on table Salutation
Initial SessionFactory creation failed.org.hibernate.AnnotationException: A Foreign key refering de.isa.entities.Personnel from de.isa.entities.Denomination has the wrong number of column. should be 1
Exception in thread "main" java.lang.ExceptionInInitializerError
at de.isa.util.HibernateUtil.<clinit>(HibernateUtil.java:30)
at de.isa.util.PersonnelDAO.createPersonnel(PersonnelDAO.java:16)
at de.isa.TestPersonnel.main(TestPersonnel.java:35)


Ich habe alles mögliche was in meiner Macht steht versucht aber doch ich bekomme das nicht hin.
Bin mit meinem Latein echt am ende und würde mich echt sehr freuen, wenn ihr mir helfen könnt.
Wie müsste ich da vor gehen ???

Bitte um Hilfe !!!

MfG
Daniel
 
Zuletzt bearbeitet:
S

SlaterB

Gast
es liegt anscheinend an dem komplizierten Join mit 3 Spalten auf einer Seite, ist das unumgänglich?
im Internet finde ich überhaupt keine Beispeile mit mehr als einer Spalte

wie sehen eigentlich alle DB-Tabellen aus?
 

Crashbreaker

Mitglied
Hallo SlaterB,

ich danke für deine Antwort.
Ich hatte hier eigentlich ein Foto / Abbildung von meiner DB eingefügt.
Doch die ist hier nicht mehr zu sehen ...

Daher füge ich es dann nun als Anhang ein ...
Wäre euch Dankbar, wenn ihr es euch anschaut und mir gegebenenfalls Vorschläge macht.

MfG
Daniel
 
S

SlaterB

Gast
in "Personnel_has_Denomination" sind nur zwei Spalten PrimaryKey,
das muss nicht unbedingt was zu bedeuten haben, habe derartiges selber noch nicht gemacht,
aber erneut die Frage: wieso 1+3 Spalten in diesem Join? reicht nicht 1+1?

das Forum verkleinert übrigens das Bild, nicht mehr viel zu sehen
 

Crashbreaker

Mitglied
in "Personnel_has_Denomination" sind nur zwei Spalten PrimaryKey,
das muss nicht unbedingt was zu bedeuten haben, habe derartiges selber noch nicht gemacht,
aber erneut die Frage: wieso 1+3 Spalten in diesem Join? reicht nicht 1+1?

das Forum verkleinert übrigens das Bild, nicht mehr viel zu sehen


Hm, da noch weitere Tabellen an diesem Personnel-Tabelle anhängt, wird entsprechend die Schlüsseln an solchen zwischen Tabellen wie "Personnel_has_Denomination"-Tabelle mit angehängt.
Da ich das über einem EER-Diagramm erstellt habe, wurde es mir so quasi vorgegeben.

Wäre es denn besser, wenn dort nur die entsprechenden Schlüsseln vorhanden wären?

Ja bzgl. des Bildes hast du recht, doch man kann es in einem neuen Tab etwas größer öffnen.

Ich Versuche das hier noch mal anzuhängen.
Nun liegt es ja auf dem Server dieses Forums.

3747d1322571543-mysql-hibernate-gibt-fehler-db-mysqlinnodb-crm.jpg


Ich hoffe ich bekomme es nun größer hin.
Oder letzte Möglichkeit wäre mit "STRG+Mausrat" den Browserinhalt vergrößern ...

MfG
Daniel
 
Zuletzt bearbeitet:
S

SlaterB

Gast
Nebenthema:
gewiss wird das Bild bisschen größer, aber eben der Text nicht ganz lesbar, mit Scrollrad zu zoomen bringt dabei gar nix ;)
aber geht ja einigermaßen zu lesen

--

zum Join habe ich nichts neues zu sagen, außer: ich habe nicht von Änderung des Datenmodells gesprochen,
es geht allein darum dass du die Join-Annotation in Java änderst, die ja der Fehler aktuell ist
 

Crashbreaker

Mitglied
Nebenthema:
gewiss wird das Bild bisschen größer, aber eben der Text nicht ganz lesbar, mit Scrollrad zu zoomen bringt dabei gar nix ;)
aber geht ja einigermaßen zu lesen

--

zum Join habe ich nichts neues zu sagen, außer: ich habe nicht von Änderung des Datenmodells gesprochen,
es geht allein darum dass du die Join-Annotation in Java änderst, die ja der Fehler aktuell ist


Ja du hast recht was das Bild angeht aber leider bekomme ich das nicht anders hin.
Ach so okay und wie genau meinst du es, dass ich die 3 Schlüssel in der Annotation raus nehme und dafür nur einen rein setzte ???

Könnte die ja Escapen / daraus nen Kommentar machen ...

MfG
Daniel
 
S

SlaterB

Gast
von Anfang an schlage ich vor die Annotation zu ändern, weiß nicht was daran fraglich ist falls du das bisherige komplizierte schon verstehst,
ganz offensichtlich meine ich, sich nur mit dem jeweiligen Primärschlüssel zu beschäftigten, wie in allen Internetbeispielen

Java:
    @ManyToMany
    @JoinTable(
        name="Personnel_has_Denomination",
        joinColumns={
            @JoinColumn(name="Denomination_idDenomination")
        },
        inverseJoinColumns={
            @JoinColumn(name="Personnel_idPersonnel"),
        }
    )
warum du überhaupt drei Spalten hast hast du auch nach mehrmaligen Nachfragen nicht gesagt
und freilich kann ich überhaupt nicht einschätzen was diese Änderung für Auswirkungen hat
 

Crashbreaker

Mitglied
Nun habe ich das getestet und habe eine ganz andere Fehlermeldung bekommen.

Und zwar diesen hier:

Code:
16:43:14,965  INFO DriverManagerConnectionProvider:170 - cleaning up connection pool: jdbc:mysql://localhost:3306/CRM-DB
16:43:14,969  INFO HibernateSearchEventListenerRegister:53 - Unable to find org.hibernate.search.event.FullTextIndexEventListener on the classpath. Hibernate Search is not enabled.
Initial SessionFactory creation failed.org.hibernate.HibernateException: Enum class not found
Exception in thread "main" java.lang.ExceptionInInitializerError
	at de.isa.util.HibernateUtil.<clinit>(HibernateUtil.java:30)
	at de.isa.util.PersonnelDAO.createPersonnel(PersonnelDAO.java:19)
	at de.isa.TestPersonnel.main(TestPersonnel.java:35)


Da steht soweit ich das verstanden habe, dass der "Enum"-Klasse fehlt ...
Das ist bei mir der Sex-Klasse ...
Müsste ich den auch Mappen ???
Oder wie könnte ich den Sex-Eigenschaften konstruieren (siehe mein 1. Beitrag) ...

MfG
Daniel
 

Crashbreaker

Mitglied
von Anfang an schlage ich vor die Annotation zu ändern, weiß nicht was daran fraglich ist falls du das bisherige komplizierte schon verstehst,
ganz offensichtlich meine ich, sich nur mit dem jeweiligen Primärschlüssel zu beschäftigten, wie in allen Internetbeispielen

Java:
    @ManyToMany
    @JoinTable(
        name="Personnel_has_Denomination",
        joinColumns={
            @JoinColumn(name="Denomination_idDenomination")
        },
        inverseJoinColumns={
            @JoinColumn(name="Personnel_idPersonnel"),
        }
    )
warum du überhaupt drei Spalten hast hast du auch nach mehrmaligen Nachfragen nicht gesagt
und freilich kann ich überhaupt nicht einschätzen was diese Änderung für Auswirkungen hat

Ach so, ja sorrry ... habe es nun auch so geändert gehabt vorhin ...
Dachte nur, da mein DB-Konstuktion so ist, müsste ich es auch so in Java (in Hibernate) auch so bauen ...

Bekomme aber nun eine weitere Fehlermeldung ...
Wäre dir da sehr Dankbar, wenn du mir da helfen könntest.

Möchte in meine Personnel-Klasse die Eigenschaft "Geschlecht" realisieren.
In der DB-Tabelle-Personnel habe ich das Feld Sex ENUM('w', 'm') deklariert.

In Java habe ich dafür den public enum Sex { ... geschrieben - siehe 1. Beitrag ...

Mache ich da etwas falsch ???

MfG
Daniel
 
S

SlaterB

Gast
Enum ist wahrlich übel, de.isa.util.GenericEnumUserType usw. klingt schlimm,

du schreibst: "de.isa.entities.Personnel$Sex"
ist es nicht eher eine eigene Klasse? lohnt sich in jedem Fall zu versuchen als so eine komische innere Notation

----

ein relativ wichtiger Hinweis noch:
unbedingt an die Bean-Spezifikation halten bzw. allgemeine Java-Code-Conventions:
Attribute zwingend klein schreiben
 

Crashbreaker

Mitglied
Enum ist wahrlich übel, de.isa.util.GenericEnumUserType usw. klingt schlimm,

du schreibst: "de.isa.entities.Personnel$Sex"
ist es nicht eher eine eigene Klasse? lohnt sich in jedem Fall zu versuchen als so eine komische innere Notation

----

ein relativ wichtiger Hinweis noch:
unbedingt an die Bean-Spezifikation halten bzw. allgemeine Java-Code-Conventions:
Attribute zwingend klein schreiben

Die Klasse GenericEnumUserTypes sieht bei mir so aus:

Java:
import java.io.Serializable;
import java.lang.reflect.Method;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;

import org.hibernate.HibernateException;
import org.hibernate.type.NullableType;
import org.hibernate.type.TypeFactory;
import org.hibernate.usertype.ParameterizedType;
import org.hibernate.usertype.UserType;

public class GenericEnumUserType implements UserType, ParameterizedType {

	private static final String DEFAULT_IDENTIFIER_METHOD_NAME = "name";
	private static final String DEFAULT_VALUE_OF_METHOD_NAME = "valueOf";

	private Class<? extends Enum> enumClass;
	private Class<?> identifierType;
	private Method identifierMethod;
	private Method valueOfMethod;
	private NullableType type;
	private int[] sqlTypes;

	@Override
	public void setParameterValues(Properties parameters) {
		String enumClassName = parameters.getProperty("enumClass");
		try {
			enumClass = Class.forName(enumClassName).asSubclass(Enum.class);
		} catch (ClassNotFoundException e) {
			throw new HibernateException("Enum class not found", e);
		}

		String identifierMethodName = parameters.getProperty(
				"identifierMethod", DEFAULT_IDENTIFIER_METHOD_NAME);

		try {
			identifierMethod = enumClass.getMethod(identifierMethodName,
					new Class[0]);
			identifierType = identifierMethod.getReturnType();
		} catch (Exception e) {
			throw new HibernateException("Failed to obtain identifier method",
					e);
		}

		type = (NullableType) TypeFactory.basic(identifierType.getName());

		if (type == null)
			throw new HibernateException("Unsupported identifier type "
					+ identifierType.getName());

		sqlTypes = new int[] { type.sqlType() };

		String valueOfMethodName = parameters.getProperty("valueOfMethod",
				DEFAULT_VALUE_OF_METHOD_NAME);

		try {
			valueOfMethod = enumClass.getMethod(valueOfMethodName,
					new Class[] { identifierType });
		} catch (Exception e) {
			throw new HibernateException("Failed to obtain valueOf method", e);
		}
	}

	@Override
	public Object assemble(Serializable cached, Object owner)
			throws HibernateException {
		return cached;
	}

	@Override
	public Object deepCopy(Object value) throws HibernateException {
		return value;
	}

	@Override
	public Serializable disassemble(Object value) throws HibernateException {
		return (Serializable) value;
	}

	@Override
	public boolean equals(Object x, Object y) throws HibernateException {
		return x == y;
	}

	@Override
	public int hashCode(Object x) throws HibernateException {
		return x.hashCode();
	}

	@Override
	public boolean isMutable() {
		return false;
	}

	@Override
	public Object nullSafeGet(ResultSet resultSet, String[] names, Object owner)
			throws HibernateException, SQLException {
		Object identifier = type.get(resultSet, names[0]);
		if (identifier == null)
			return null;

		try {
			return valueOfMethod.invoke(enumClass, new Object[] { identifier });
		} catch (Exception e) {
			throw new HibernateException(
					"Exception while invoking valueOf method '"
							+ valueOfMethod.getName() + "' of "
							+ "enumeration class '" + enumClass + "'", e);
		}
	}

	@Override
	public void nullSafeSet(PreparedStatement preparedStatement, Object value,
			int index) throws HibernateException, SQLException {
		try {
			if (value == null)
				preparedStatement.setNull(index, type.sqlType());
			else {
				Object identifier = identifierMethod.invoke(value,
						new Object[0]);
				type.set(preparedStatement, identifier, index);
			}
		} catch (Exception e) {
			throw new HibernateException(
					"Exception while invoking identifierMethod '"
							+ identifierMethod.getName() + "' of "
							+ "enumeration class '" + enumClass + "'", e);
		}
	}

	@Override
	public Object replace(Object original, Object target, Object owner)
			throws HibernateException {
		return original;
	}

	@Override
	public Class<?> returnedClass() {
		return enumClass;
	}

	@Override
	public int[] sqlTypes() {
		return sqlTypes;
	}

}


Ich weiß sonst nicht wie ich das anders Lösen kann.
Gibt es da irgendein Beispiel oder wie habt ihr das denn gelöst bezüglich Geschlecht in der DB ENUM('w', 'm') etc. ???

Oh okay, weiß ich Bescheid und werde das dann so nach Bean-Spezifikation umsetzten.
Gibt es da irgendwo welche Hinweise, wo drin steht wie ich mich halten soll ???

MfG
Daniel
 
S

SlaterB

Gast
GenericEnumUserType ist nicht von dir oder?
da ist es richtig, eigentlich nicht schwer sich jedes Beispiel der Welt anzuschauen und einfachste Regeln dann zu übernehmen,
Klassen schreibt man groß, Variablen klein

--------

ich hatte doch was zu inneren Klassen gesagt, ist dir das komplett egal?
(muss allerdings auch wieder nicht unbedingt das Problem sein)
 

Crashbreaker

Mitglied
GenericEnumUserType ist nicht von dir oder?
da ist es richtig, eigentlich nicht schwer sich jedes Beispiel der Welt anzuschauen und einfachste Regeln dann zu übernehmen,
Klassen schreibt man groß, Variablen klein

--------

ich hatte doch was zu inneren Klassen gesagt, ist dir das komplett egal?
(muss allerdings auch wieder nicht unbedingt das Problem sein)

Nein, die Klasse habe ich vom Internet gefischt, da ich nach einem Enum Lösung gesucht habe.

Ist diese Klasse denn nun unangebracht für meinem Beispiel ???

Hm, was meinst du zu dem Inneren Klassen ???
Mir ist es nicht egal - möchte doch zu einem guten Ergebnis / Lösung kommen.

Daher versuche ich dich so gut wie möglich zu verstehen ...

MfG
Daniel
 

Crashbreaker

Mitglied
Bin etwas weiter gekommen und nun habe ich diesen Fehler hier:

Code:
de.isa.Personnel (bodySize, firstname, lastname, sex, weight) values (1.84, 'Hans' at line 1

Verstehe nicht warum ....
Vorallem, sind es nicht die Reihenfolge die ich eingesetzt habe ...
Normalerweise müsste erst Firstname, Lastname usw. kommen ... warum wird erst bodySize hier vorgezogen ???

Bitte um Hilfe, bin echt ratlos und Checke das nicht ...

MfG
Daniel
 
S

SlaterB

Gast
ein $ im Mapping steht für innere Klassen, nun vielleicht nicht mehr,

gibts nicht mehr zu neuen Fehler? wann tritt er auf? hast du irgendeine Befüllung beim Start eingebaut,
oder sind die DB-Tabellen schon befüllt? 'Hans' bekannt?
 

Crashbreaker

Mitglied
ein $ im Mapping steht für innere Klassen, nun vielleicht nicht mehr,

gibts nicht mehr zu neuen Fehler? wann tritt er auf? hast du irgendeine Befüllung beim Start eingebaut,
oder sind die DB-Tabellen schon befüllt? 'Hans' bekannt?

Also die DB steht ohne Inhalt, quasi leer da.
Wollte mit der TestPersonnel-Klasse die ersten Daten in die DB abspeichern.

Wann der Fehler auftritt - keine Ahnung, wie bekomme ich das raus?
Habe Debug benutzt und da stellt sich nichts heraus bzw. der Zeigt mir nicht die Ursache des Fehlers an.
Der bleibt bei einem $Proxy9.saveOrUpdate(Object) line: not available stehen und den $Proxy9.saveOrUpdate findet der nicht, da steht Source not found ...
Hier bekomme ich als Resultat, dass hier angezeigt:

Code:
15:07:17,710  INFO DriverManagerConnectionProvider:170 - cleaning up connection pool: jdbc:mysql://localhost:3306/CRM-DB
15:07:17,775  INFO SessionFactoryObjectFactory:105 - Not binding factory to JNDI, no JNDI name configured
Hibernate: insert into isa.Personnel (bodySize, firstname, lastname, weight) values (?, ?, ?, ?)
15:07:17,923  WARN JDBCExceptionReporter:100 - SQL Error: 1064, SQLState: 42000
15:07:17,924 ERROR JDBCExceptionReporter:101 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-isa.Personnel (bodySize, firstname, lastname, weight) values (1.84, 'Hans', 'M' at line 1

Und wenn ich dann den nächsten Schritt im Debug-Modus gehe, kommt der entsprechende Error und zwar diese hier:

Code:
Exception in thread "main" org.hibernate.exception.SQLGrammarException: could not insert: [de.isa.entities.Personnel]
	at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:90)
	at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
	at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:64)
	at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2176)
	at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2656)
	at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:71)
	at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279)
	at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:321)
	at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:204)
	at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:130)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:117)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)
	at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:535)
	at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:527)
	at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:523)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.hibernate.context.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:342)
	at $Proxy9.saveOrUpdate(Unknown Source)
	at de.isa.util.PersonnelDAO.createPersonnel(PersonnelDAO.java:21)
	at de.isa.TestPersonnel.main(TestPersonnel.java:34)


Ich muss auch sagen, dass ich in Personnel.java die Eigenschaften "Sex" komplett auskommentiert habe und dürfte somit erst mal keine Schwierigkeiten machen.

Ich hoffe ihr könnt mir helfen, bin echt ratlos :-(


MfG
Daniel
 
Zuletzt bearbeitet:
S

SlaterB

Gast
> de.isa.TestPersonnel.main(TestPersonnel.java:34)
ist offensichtlich dein Code der dafür verantwortlich ist,

wie sieht deine Klasse TestPersonnel aus? welche Zeile ist Zeile 34?

ich glaube inzwischen zu erkennen, das versucht wird, als SQL-Tabellenname 'isa.Personnel' zu verwenden, fällt dir ein Grund dafür ein?
liegt die Klasse im package isa oder de.csplus.icell.entities?

wie heißt die Datenbanktabelle? vielleicht solltest du sie im Mapping angeben
Chapter*2.*Mapping Entities
2.2.1.1. Defining the table
 

Crashbreaker

Mitglied
Die TestPersonnel sieht so aus:

[JAVA=6]

public class TestPersonnel {

/**
* @param args
*/
public static void main(String[] args) {

//Salutation Anrede = new Salutation("Herr");

Denomination jeans = new Denomination("Jeans", "Typ", "36", "schwarz", "Beschreibung");
Denomination jacke = new Denomination("Jacke", "typ", "XXL", "schwarz", "Security Jacke");
Denomination rock = new Denomination("Rock", "mini", "32", "rot", "Security Rock");
Denomination bh = new Denomination("BH", "BH-XYZ", "85D", "rot", "Security BH");

//Personnel hans = new Personnel("Hans", "Meiser", Sex.MALE, 1.84, 95.6);
Personnel hans = new Personnel("Hans", "Meiser", 1.84, 95.6);
//Personnel ayse = new Personnel("Ayse", "Soyatli", Sex.FEMALE, 1.68, 53.7);
Personnel ayse = new Personnel("Ayse", "Soyatli", 1.68, 53.7);

hans.getDenominations().add(jacke);
hans.getDenominations().add(jeans);
//hans.setSalutation(anrede);

ayse.getDenominations().add(rock);
ayse.getDenominations().add(bh);

PersonnelDAO personnelDAO = new PersonnelDAO();
personnelDAO.createPersonnel(hans);
personnelDAO.createPersonnel(ayse);


// Ausgabe
//Personnel personnelResult = personnelDAO.getPersonnelById(new Integer(2));

//System.out.println("Personnel-Firstname: " + personnelResult.getFirstname());

}

}

[/code]

Warum isa.Personnel verwendet wird weiß ich nicht ...
Die DB Heißt bei mir CRM-DB und bei den Klassen habe ich keine Tabellennamen als Annotation gefügt ... sollte ich das auch machen ???

MfG
Daniel
 
Zuletzt bearbeitet von einem Moderator:
S

SlaterB

Gast
> sollte ich das auch machen ???

wie heißt denn die Datenbank-Tabelle, erneut nachgefragt..?
wenn sie nicht genau Personnel heißt, dann besteht doch offensichtlich das grundsätzliche Problem dass das Program nicht wissen kann welche DB-Tabelle gemeint ist,
wenn die DB-Tabelle doch Personnel heißt, dann kann es vielleicht funktionieren, dann weiß ich nicht genau wo der Fehler liegt,
dennoch schlage ich vor die Annotation für den Tabellennamen auszuprobieren

edit:
ach so, PersonnelDAO.createPersonnel(PersonnelDAO.java:21) ist ja auch von dir, wie sieht da der Code aus, die ganze Methode?
und ebenfalls unbeantwortet: in welchem package liegt die Klasse Personnel?
da TestPersonnel keine imports hat im package de.isa?

edit2:
das wäre ein weiterer Grund für den Fehler bei der Enum
"de.isa.entities.Personnel$Sex" hast du im ersten Posting
"de.isa.entities.Sex" wäre es ohne innere Klasse
"de.isa.Sex" wohl noch richtiger,
bei sowas muss man schon aufpassen..
 
Zuletzt bearbeitet von einem Moderator:

Crashbreaker

Mitglied
Die Datenbank-Tebelle heißen da genau so wie die Klassen selbst ... doch in der DB steht alles klein geschrieben.
Ich habe die @Table(name="personnel) und @Tabele(name="denomination") hinzugefügt und es ist immer noch der gleiche Fehler.

Die Klasse PersonnelDAO sieht so aus:
[JAVA=8]
public class PersonnelDAO {

static {
HibernateUtilMapping.setAnnotationClass(Personnel.class);
HibernateUtilMapping.setAnnotationClass(Denomination.class);
//HibernateUtilMapping.setAnnotationClass(Salutation.class);
}

public void createPersonnel(Personnel p) {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
Transaction transaction = session.beginTransaction();

session.saveOrUpdate(p);
transaction.commit();
}

public Personnel getPersonnelById(int id) {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
Transaction transaction = session.beginTransaction();

Personnel personnel = (Personnel) session.get(Personnel.class, id);
transaction.commit();

return personnel;

}
}
[/code]

Die Packages habe ich explizit raus genommen, da die hier ja nicht so relevant sind ...
Doch die Klassen sind in den richtigen Verzeichnisse und habe auch darauf geachtet, dass es überall richtig eingetragen ist.

Doch das mit dem ENUM und $ Geschichte wusste ich nicht (habe was dazu gelernt) ...
Werde ich entsprechend umändert. Aber momentan habe ich diesen Eigenschaft eh auskommentiert.
Da ich das Problematik eingrenzen wollte.

Ich hoffe doch sehr, dass ich diesmal keine Fragen von dir ausgelassen habe.
Falls jedoch möchte ich mich dafür entschuldigen.
Bemühe mich jede Frage zu beantworten.

Aber mir fehlt gerade ein, dass die DB anders heißt als die Java Struktur hier ... aber in der hibernate.cfg.xml habe ich das richtige eingetragen (also das richtige gemappt) ...

MfG
Daniel
 
Zuletzt bearbeitet von einem Moderator:
S

SlaterB

Gast
hmm, dann habe ich aktuell keine rechte Theorie dazu,

ein Versuch noch der vielleicht Informationen bringen könnte:
versuche als erstes im Testprogramm zu laden:
Java:
List l = session.createQuery("from Personnel").list();
System.out.println("Personnel: "+l);
funktioniert diese Query (Ausgabe sichtbar?) oder gibt es eine Fehlermeldung, welche genau?

edit:
[c]de.isa.entities.Personnel[/c] schreibt die Fehlermeldung, ist das also das richtige package?
wie kann dann gleichzeitig irgendwo [c]isa.Personnel[/c] auftauschen, ...,
suche mal nach [c]isa.Personnel[/c] in allen möglichen sonstigen Konfigurationsdateien

einmal zitiest du auch eine Fehlermeldung mit [c]de.isa.Personnel[/c]..
 
Zuletzt bearbeitet von einem Moderator:

Crashbreaker

Mitglied
Shit shit ...
Es funktioniert einfach nicht ....
Bin mit mein Latein ehrlich am ende ...
Dabei sagt man, mit Hibernate ist man besser dran ... (von wegen) ...

Ich habe nun das Projekt komplett neu erstellt ...
Die Struktur noch mal neu definiert und habe mich erst einmal nur auf die 3 Tabellen konzentriert.

Die DB sieht bei mir so aus:


-- phpMyAdmin SQL Dump
-- version 3.4.5
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Erstellungszeit: 02. Dez 2011 um 03:20
-- Server Version: 5.5.16
-- PHP-Version: 5.3.8

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";

--
-- Datenbank: `hibernate`
--
CREATE DATABASE `hibernate` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;
USE `hibernate`;

-- --------------------------------------------------------

--
-- Tabellenstruktur für Tabelle `collection`
--
-- Erzeugt am: 02. Dez 2011 um 02:08
--

DROP TABLE IF EXISTS `collection`;
CREATE TABLE IF NOT EXISTS `collection` (
`idCollection` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`idCollection`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

-- --------------------------------------------------------

--
-- Tabellenstruktur für Tabelle `collection_has_privileges`
--
-- Erzeugt am: 02. Dez 2011 um 02:08
--

DROP TABLE IF EXISTS `collection_has_privileges`;
CREATE TABLE IF NOT EXISTS `collection_has_privileges` (
`Privileges_idPrivileges` int(11) NOT NULL,
`Collection_idCollection` int(11) NOT NULL,
KEY `FK72030A68F5DA2005` (`Collection_idCollection`),
KEY `FK72030A68C8497FC9` (`Privileges_idPrivileges`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- RELATIONEN DER TABELLE `collection_has_privileges`:
-- `Privileges_idPrivileges`
-- `privileges` -> `idPrivileges`
-- `Collection_idCollection`
-- `collection` -> `idCollection`
--

-- --------------------------------------------------------

--
-- Tabellenstruktur für Tabelle `privileges`
--
-- Erzeugt am: 02. Dez 2011 um 02:08
--

DROP TABLE IF EXISTS `privileges`;
CREATE TABLE IF NOT EXISTS `privileges` (
`idPrivileges` int(11) NOT NULL AUTO_INCREMENT,
`description` varchar(255) DEFAULT NULL,
`name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`idPrivileges`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

--
-- Constraints der exportierten Tabellen
--

--
-- Constraints der Tabelle `collection_has_privileges`
--
ALTER TABLE `collection_has_privileges`
ADD CONSTRAINT `FK72030A68C8497FC9` FOREIGN KEY (`Privileges_idPrivileges`) REFERENCES `privileges` (`idPrivileges`),
ADD CONSTRAINT `FK72030A68F5DA2005` FOREIGN KEY (`Collection_idCollection`) REFERENCES `collection` (`idCollection`);


hibernate.cfg.xml sieht bei mir so aus:

[XML]
<?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>

<!-- Database connection settings -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/hibernate</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>

<property name="hibernate.default_schema">hibernate</property>

<!-- JDBC connection pool (use the built-in) -->
<property name="connection.pool_size">2</property>

<!-- SQL dialect -->
<property name="dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>

<!-- Enable Hibernate's current session context -->
<property name="current_session_context_class">thread</property>

<!-- Disable the second-level cache -->
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>

<!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property>

<!-- Drop and re-create the database schema on startup
<property name="hbm2ddl.auto">create</property>

-->

</session-factory>

</hibernate-configuration>


[/XML]


Die Klasse CollectionDAO sieht bei mir so aus:
Java:
package de.isa.hibernate.util;

import java.util.List;

import org.hibernate.Session;
import org.hibernate.Transaction;

import de.isa.hibernate.entities.Collection;
import de.isa.hibernate.entities.Privileges;


public class CollectionDAO {

	static {
		HibernateUtilMapping.setAnnotationClass(Collection.class);
		HibernateUtilMapping.setAnnotationClass(Privileges.class);
	}
	
	public void creatCollection(Collection collection) {
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		Transaction transaction = session.beginTransaction();
		
		//session.saveOrUpdate(collection);
		session.save(collection);

		List l = session.createQuery("from Collection").list();
		System.out.println("Collection: "+l);
		
		transaction.commit();
	}
	
	public Collection getCollectionById(int id) {
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		Transaction transaction = session.beginTransaction();
		
		Collection collection = (Collection) session.get(Collection.class, id);
		transaction.commit();
		
		return collection;		
	}
}

Die Klasse Collection:
Java:
package de.isa.hibernate.entities;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.Table;

@Entity
@Table(name = "collection")
public class Collection {

	private int idCollection;
	private String name;
	
	private List<Privileges> privileges = new ArrayList<Privileges>();

	public Collection() {
		super();
	}

	public Collection(int idCollection, String name) { //, List<Privileges> privileges) {
		super();
		this.idCollection = idCollection;
		this.name = name;
		//this.privileges = privileges;
	}

	public Collection(String name) { //, List<Privileges> privileges) {
		super();
		this.name = name;
		//this.privileges = privileges;
	}

	@Id
	@GeneratedValue
	public int getIdCollection() {
		return this.idCollection;
	}

	public void setIdCollection(int idCollection) {
		this.idCollection = idCollection;
	}

	public String getName() {
		return this.name;
	}

	public void setName(String name) {
		this.name = name;
	}

	@ManyToMany
	@JoinTable(
		name = "Collection_has_Privileges",
		joinColumns = {
				@JoinColumn(name = "Collection_idCollection")
		},
		inverseJoinColumns = {
				@JoinColumn(name = "Privileges_idPrivileges")
		}
	)
	public List<Privileges> getPrivileges() {
		return this.privileges;
	}

	public void setPrivileges(List<Privileges> privileges) {
		this.privileges = privileges;
	}
	
	
}


Die Klasse Privileges:
Java:
package de.isa.hibernate.entities;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.Table;

@Entity
@Table(name = "privileges")
public class Privileges {

	private int idPrivileges;
	private String name;
	private String description;
	
	private List<Collection> collections = new ArrayList<Collection>();

	public Privileges() {
		super();
	}

	public Privileges(int idPrivileges, String name, String description) {//,
			//List<Collection> collections) {
		super();
		this.idPrivileges = idPrivileges;
		this.name = name;
		this.description = description;
		//this.collections = collections;
	}

	public Privileges(String name, String description) { //,
			//List<Collection> collections) {
		super();
		this.name = name;
		this.description = description;
		//this.collections = collections;
	}

	@Id
	@GeneratedValue
	public int getIdPrivileges() {
		return this.idPrivileges;
	}

	public void setIdPrivileges(int idPrivileges) {
		this.idPrivileges = idPrivileges;
	}

	public String getName() {
		return this.name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getDescription() {
		return this.description;
	}

	public void setDescription(String description) {
		this.description = description;
	}

	@ManyToMany
	@JoinTable(
		name = "Collection_has_Privileges",
		joinColumns = {
				@JoinColumn(name = "Privileges_idPrivileges")
		},
		inverseJoinColumns = {
				@JoinColumn(name = "Collection_idCollection")
		}
	)
	public List<Collection> getCollections() {
		return this.collections;
	}

	public void setCollections(List<Collection> collections) {
		this.collections = collections;
	}
	
	
}

Die Klasse TestCollection:
Java:
package de.isa.hibernate;

import de.isa.hibernate.entities.Collection;
import de.isa.hibernate.entities.Privileges;
import de.isa.hibernate.util.CollectionDAO;

public class TestCollection {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Privileges privileges = new Privileges("read", "Lese-Recht");
		Collection collection = new Collection("Benutzer");
		
		collection.getPrivileges().add(privileges);
		
		
		CollectionDAO collectionDAO = new CollectionDAO();
		collectionDAO.creatCollection(collection);
	}

}


Fehlermeldung sieht so aus:

Java:
03:41:31,231  INFO Version:15 - Hibernate Annotations 3.4.0.GA
03:41:31,249  INFO Environment:560 - Hibernate 3.3.2.GA
03:41:31,252  INFO Environment:593 - hibernate.properties not found
03:41:31,257  INFO Environment:771 - Bytecode provider name : javassist
03:41:31,262  INFO Environment:652 - using JDK 1.4 java.sql.Timestamp handling
03:41:31,358  INFO Version:14 - Hibernate Commons Annotations 3.1.0.GA
03:41:31,368  INFO Configuration:1474 - configuring from resource: hibernate.cfg.xml
03:41:31,369  INFO Configuration:1451 - Configuration resource: hibernate.cfg.xml
03:41:31,471  INFO Configuration:1589 - Configured SessionFactory: null
03:41:31,496  INFO Dialect:175 - Using dialect: org.hibernate.dialect.MySQL5InnoDBDialect
03:41:31,612  INFO AnnotationBinder:419 - Binding entity from annotated class: de.isa.hibernate.entities.Collection
03:41:31,655  INFO EntityBinder:422 - Bind entity de.isa.hibernate.entities.Collection on table collection
03:41:31,750  INFO AnnotationBinder:419 - Binding entity from annotated class: de.isa.hibernate.entities.Privileges
03:41:31,751  INFO EntityBinder:422 - Bind entity de.isa.hibernate.entities.Privileges on table privileges
03:41:31,782  INFO AnnotationConfiguration:369 - Hibernate Validator not found: ignoring
03:41:31,825  INFO SchemaExport:226 - Running hbm2ddl schema export
03:41:31,826 DEBUG SchemaExport:242 - import file not found: /import.sql
03:41:31,827  INFO SchemaExport:251 - exporting generated schema to database
03:41:31,830  INFO DriverManagerConnectionProvider:64 - Using Hibernate built-in connection pool (not for production use!)
03:41:31,830  INFO DriverManagerConnectionProvider:65 - Hibernate connection pool size: 2
03:41:31,831  INFO DriverManagerConnectionProvider:68 - autocommit mode: false
03:41:31,849  INFO DriverManagerConnectionProvider:103 - using driver: com.mysql.jdbc.Driver at URL: jdbc:mysql://localhost:3306/hibernate
03:41:31,850  INFO DriverManagerConnectionProvider:109 - connection properties: {user=root, password=****}
alter table hibernate.Collection_has_Privileges drop foreign key FK72030A68F5DA2005
03:41:32,137 DEBUG SchemaExport:377 - alter table hibernate.Collection_has_Privileges drop foreign key FK72030A68F5DA2005
alter table hibernate.Collection_has_Privileges drop foreign key FK72030A68C8497FC9
03:41:32,434 DEBUG SchemaExport:377 - alter table hibernate.Collection_has_Privileges drop foreign key FK72030A68C8497FC9
drop table if exists hibernate.Collection_has_Privileges
03:41:32,732 DEBUG SchemaExport:377 - drop table if exists hibernate.Collection_has_Privileges
drop table if exists hibernate.collection
03:41:32,786 DEBUG SchemaExport:377 - drop table if exists hibernate.collection
drop table if exists hibernate.privileges
03:41:32,838 DEBUG SchemaExport:377 - drop table if exists hibernate.privileges
create table hibernate.Collection_has_Privileges (Privileges_idPrivileges integer not null, Collection_idCollection integer not null) ENGINE=InnoDB
03:41:32,891 DEBUG SchemaExport:377 - create table hibernate.Collection_has_Privileges (Privileges_idPrivileges integer not null, Collection_idCollection integer not null) ENGINE=InnoDB
create table hibernate.collection (idCollection integer not null auto_increment, name varchar(255), primary key (idCollection)) ENGINE=InnoDB
03:41:33,025 DEBUG SchemaExport:377 - create table hibernate.collection (idCollection integer not null auto_increment, name varchar(255), primary key (idCollection)) ENGINE=InnoDB
create table hibernate.privileges (idPrivileges integer not null auto_increment, description varchar(255), name varchar(255), primary key (idPrivileges)) ENGINE=InnoDB
03:41:33,135 DEBUG SchemaExport:377 - create table hibernate.privileges (idPrivileges integer not null auto_increment, description varchar(255), name varchar(255), primary key (idPrivileges)) ENGINE=InnoDB
alter table hibernate.Collection_has_Privileges add index FK72030A68F5DA2005 (Collection_idCollection), add constraint FK72030A68F5DA2005 foreign key (Collection_idCollection) references hibernate.collection (idCollection)
03:41:33,293 DEBUG SchemaExport:377 - alter table hibernate.Collection_has_Privileges add index FK72030A68F5DA2005 (Collection_idCollection), add constraint FK72030A68F5DA2005 foreign key (Collection_idCollection) references hibernate.collection (idCollection)
alter table hibernate.Collection_has_Privileges add index FK72030A68C8497FC9 (Privileges_idPrivileges), add constraint FK72030A68C8497FC9 foreign key (Privileges_idPrivileges) references hibernate.privileges (idPrivileges)
03:41:33,575 DEBUG SchemaExport:377 - alter table hibernate.Collection_has_Privileges add index FK72030A68C8497FC9 (Privileges_idPrivileges), add constraint FK72030A68C8497FC9 foreign key (Privileges_idPrivileges) references hibernate.privileges (idPrivileges)
03:41:33,890  INFO SchemaExport:268 - schema export complete
03:41:33,892  INFO DriverManagerConnectionProvider:170 - cleaning up connection pool: jdbc:mysql://localhost:3306/hibernate
03:41:33,895  INFO HibernateSearchEventListenerRegister:53 - Unable to find org.hibernate.search.event.FullTextIndexEventListener on the classpath. Hibernate Search is not enabled.
03:41:33,899  INFO DriverManagerConnectionProvider:64 - Using Hibernate built-in connection pool (not for production use!)
03:41:33,900  INFO DriverManagerConnectionProvider:65 - Hibernate connection pool size: 2
03:41:33,900  INFO DriverManagerConnectionProvider:68 - autocommit mode: false
03:41:33,901  INFO DriverManagerConnectionProvider:103 - using driver: com.mysql.jdbc.Driver at URL: jdbc:mysql://localhost:3306/hibernate
03:41:33,901  INFO DriverManagerConnectionProvider:109 - connection properties: {user=root, password=****}
03:41:33,923  INFO SettingsFactory:114 - RDBMS: MySQL, version: 5.5.16
03:41:33,923  INFO SettingsFactory:115 - JDBC driver: MySQL-AB JDBC Driver, version: mysql-connector-java-5.1.18 ( Revision: [email]tonci.grgin@oracle.com[/email]-20110930151701-jfj14ddfq48ifkfq )
03:41:33,936  INFO Dialect:175 - Using dialect: org.hibernate.dialect.MySQL5InnoDBDialect
03:41:33,938  INFO TransactionFactoryFactory:59 - Using default transaction strategy (direct JDBC transactions)
03:41:33,940  INFO TransactionManagerLookupFactory:80 - No TransactionManagerLookup configured (in JTA environment, use of read-write or transactional second-level cache is not recommended)
03:41:33,940  INFO SettingsFactory:161 - Automatic flush during beforeCompletion(): disabled
03:41:33,941  INFO SettingsFactory:165 - Automatic session close at end of transaction: disabled
03:41:33,941  INFO SettingsFactory:172 - JDBC batch size: 15
03:41:33,941  INFO SettingsFactory:175 - JDBC batch updates for versioned data: disabled
03:41:33,942  INFO SettingsFactory:180 - Scrollable result sets: enabled
03:41:33,942  INFO SettingsFactory:188 - JDBC3 getGeneratedKeys(): enabled
03:41:33,943  INFO SettingsFactory:196 - Connection release mode: auto
03:41:33,944  INFO SettingsFactory:214 - Default schema: hibernate
03:41:33,944  INFO SettingsFactory:220 - Maximum outer join fetch depth: 2
03:41:33,944  INFO SettingsFactory:223 - Default batch fetch size: 1
03:41:33,944  INFO SettingsFactory:227 - Generate SQL with comments: disabled
03:41:33,945  INFO SettingsFactory:231 - Order SQL updates by primary key: disabled
03:41:33,945  INFO SettingsFactory:235 - Order SQL inserts for batching: disabled
03:41:33,945  INFO SettingsFactory:397 - Query translator: org.hibernate.hql.ast.ASTQueryTranslatorFactory
03:41:33,948  INFO ASTQueryTranslatorFactory:47 - Using ASTQueryTranslatorFactory
03:41:33,948  INFO SettingsFactory:243 - Query language substitutions: {}
03:41:33,948  INFO SettingsFactory:248 - JPA-QL strict compliance: disabled
03:41:33,949  INFO SettingsFactory:253 - Second-level cache: enabled
03:41:33,949  INFO SettingsFactory:257 - Query cache: disabled
03:41:33,954  INFO SettingsFactory:382 - Cache region factory : org.hibernate.cache.impl.bridge.RegionFactoryCacheProviderBridge
03:41:33,954  INFO RegionFactoryCacheProviderBridge:61 - Cache provider: org.hibernate.cache.NoCacheProvider
03:41:33,955  INFO SettingsFactory:267 - Optimize cache for minimal puts: disabled
03:41:33,955  INFO SettingsFactory:276 - Structured second-level cache entries: disabled
03:41:33,959  INFO SettingsFactory:296 - Echoing all SQL to stdout
03:41:33,960  INFO SettingsFactory:305 - Statistics: disabled
03:41:33,960  INFO SettingsFactory:309 - Deleted entity synthetic identifier rollback: disabled
03:41:33,961  INFO SettingsFactory:324 - Default entity-mode: pojo
03:41:33,961  INFO SettingsFactory:328 - Named query checking : enabled
03:41:33,999  INFO SessionFactoryImpl:193 - building session factory
03:41:34,203  INFO DriverManagerConnectionProvider:170 - cleaning up connection pool: jdbc:mysql://localhost:3306/hibernate
03:41:34,208  INFO SessionFactoryObjectFactory:105 - Not binding factory to JNDI, no JNDI name configured
Hibernate: insert into hibernate.collection (name) values (?)
Hibernate: select collection0_.idCollection as idCollec1_0_, collection0_.name as name0_ from hibernate.collection collection0_
Collection: [de.isa.hibernate.entities.Collection@5bab2b55]
Hibernate: insert into hibernate.Collection_has_Privileges (Collection_idCollection, Privileges_idPrivileges) values (?, ?)
03:41:34,509 ERROR AbstractFlushingEventListener:324 - Could not synchronize database state with session
org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: de.isa.hibernate.entities.Privileges
	at org.hibernate.engine.ForeignKeys.getEntityIdentifierIfNotUnsaved(ForeignKeys.java:242)
	at org.hibernate.type.EntityType.getIdentifier(EntityType.java:430)
	at org.hibernate.type.ManyToOneType.nullSafeSet(ManyToOneType.java:101)
	at org.hibernate.persister.collection.AbstractCollectionPersister.writeElement(AbstractCollectionPersister.java:777)
	at org.hibernate.persister.collection.AbstractCollectionPersister.recreate(AbstractCollectionPersister.java:1165)
	at org.hibernate.action.CollectionRecreateAction.execute(CollectionRecreateAction.java:58)
	at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279)
	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:263)
	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:171)
	at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
	at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:50)
	at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1028)
	at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:366)
	at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:137)
	at de.isa.hibernate.util.CollectionDAO.creatCollection(CollectionDAO.java:29)
	at de.isa.hibernate.TestCollection.main(TestCollection.java:20)
Exception in thread "main" org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: de.isa.hibernate.entities.Privileges
	at org.hibernate.engine.ForeignKeys.getEntityIdentifierIfNotUnsaved(ForeignKeys.java:242)
	at org.hibernate.type.EntityType.getIdentifier(EntityType.java:430)
	at org.hibernate.type.ManyToOneType.nullSafeSet(ManyToOneType.java:101)
	at org.hibernate.persister.collection.AbstractCollectionPersister.writeElement(AbstractCollectionPersister.java:777)
	at org.hibernate.persister.collection.AbstractCollectionPersister.recreate(AbstractCollectionPersister.java:1165)
	at org.hibernate.action.CollectionRecreateAction.execute(CollectionRecreateAction.java:58)
	at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279)
	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:263)
	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:171)
	at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
	at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:50)
	at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1028)
	at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:366)
	at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:137)
	at de.isa.hibernate.util.CollectionDAO.creatCollection(CollectionDAO.java:29)
	at de.isa.hibernate.TestCollection.main(TestCollection.java:20)


Da sind auch nun die Packages zu sehen und dürfte euch nun nicht so ganz durcheinander bringen wie bisher es war ...

Ich hoffe ihr könnt mir helfen.

MfG
Daniel
 
Zuletzt bearbeitet:

Crashbreaker

Mitglied

Juhuuuu, es hat geklappt ... Es lag also an dem Cascade ...

Habe nun aber ein Problem !!!

Und zwar, wenn ich mehrere Datensätze in die Datenbank schreiben möchte, existiert nur die zuletzt geschriebene Datensatz in der DB.
Entweder wird es überschrieben oder jedesmal wird die DB neu erstellt.
Wie und was muss ich ggf. ändern um normal mit der DB zu Arbeiten?

Kann mir denn jemand diese Zeile hier noch erklären / erläutern ???
Java:
new SchemaExport(config).create(true, true);

Wie kann ich mein Projekt so gestalten, dass wenn der DB nicht existiert, dass er es erstellt und wenn sie doch existiert, dass dann nur die Daten geschrieben / gelöscht / geändert werden ???

Wofür steht in der Config-Datei die "hbm2ddl.auto" ???
Bei manchen steht dort "create" (wie bei mir in dem Fall), bei manchen "update" und nun entdecke ich auch "create-drop" ?!?

Code:
<property name="hbm2ddl.auto">create-drop</property>

Wäre euch Dankbar, wenn ihr mir das erklären könnt


MfG
Daniel
 
Zuletzt bearbeitet:
S

SlaterB

Gast
nur eine Sekunde Suchmaschine mit mit 'hbm2ddl.auto create-drop' liefert sofort
Chapter*3.*Configuration
With create-drop, the database schema will be dropped when the SessionFactory is closed explicitly.

---

zur Persistierung sage ich nichts konkretes, das ist mir zu kompliziert von DB und wer weiß wie vielen Einstellungen abhängig, allgemein:
- auf Transaktionen / Commit achten
- immer nach fertigen Tutorials richten,
sofern nicht irgendeine Beispielanwendung steht, die in einer Dummy-Tabelle der zu benutzenden Datenbank etwas erfolgreich speichert, würde ich über eigene Klassen usw. gar nicht erst nachdenken
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Mysql Views und Hibernate Caching Datenbankprogrammierung 4
K Java Object mit Hibernate in MySQL abspeichern Datenbankprogrammierung 1
I MySQL Hibernate / MySQL alias in WHERE clause Datenbankprogrammierung 1
J MySQL Datenbank konfigurieren, JDBC, MySQL oder Hibernate Datenbankprogrammierung 2
B MySQL Fehler: Cannot open connection mit Tomcat7, Hibernate und MySQL Datenbankprogrammierung 4
K Hibernate + MySQL Problem... Datenbankprogrammierung 2
S Hibernate id generator und MySQL Datenbankprogrammierung 4
B Hibernate mit MySql - Verständniss Frage Datenbankprogrammierung 8
F Hibernate mit MySQL Beispiel und Timestamp Datenbankprogrammierung 6
C MySQL Datenbank mit Hibernate befüllen Datenbankprogrammierung 5
Juelin Java und MySQL MariaDB - WHERE-Klausel Datenbankprogrammierung 17
W MySQL-Connector funktioniert nicht über WLAN -> MacOS Datenbankprogrammierung 10
Juelin MySQL Datenbankmit glassfish und Netbeans Datenbankprogrammierung 18
Auf MySql Datenbank zugreifen funktioniert nicht Datenbankprogrammierung 8
TheSkyRider MySQL Datenbankzuordnung in Verbindung mit Java Datenbankprogrammierung 7
Warum funktioniert MySQL nicht Datenbankprogrammierung 8
M MySQL Datenbank in Array Datenbankprogrammierung 2
P MySQL- Neues Passwort Datenbankprogrammierung 1
btwX28 mysql abfrage über phpmyadmin Datenbankprogrammierung 8
sserio SQL oder MySQL Datenbankprogrammierung 44
OnDemand Mysql Query Builder Datenbankprogrammierung 1
Z MySQL "Too many connections" auch nach schliessen der Connections. Datenbankprogrammierung 10
yakazuqi MySQL MySQL Connection reset Datenbankprogrammierung 7
OnDemand MySql Foreign Key nötig oder unnötig Datenbankprogrammierung 3
W MYSQL Datenbank Login Android Datenbankprogrammierung 3
OnDemand MySQL und mongoDB wann macht was Sinn? Datenbankprogrammierung 11
bueseb84 Spring Boot : Update Mysql Datenbank Datenbankprogrammierung 1
Avalon Attribute werden mit Unterstrich in eine MySQL Datenbank eingetragen Datenbankprogrammierung 10
D MYSQL goorm IDE - Wie speichern? Datenbankprogrammierung 0
OnDemand Mysql UPDATE if condition Datenbankprogrammierung 14
D MySQL Geburtsdatum per KW abfragen Datenbankprogrammierung 1
C Java MySQL check if value exists in database Datenbankprogrammierung 2
H Fehler bei getConnection zu MySQL Datenbank Datenbankprogrammierung 18
J MySQL - Primary Key Date,Time vs ID Datenbankprogrammierung 16
ruutaiokwu MySQL: Messwerte, welche stagnieren interpolieren? Datenbankprogrammierung 2
S Datenbank MySQL und Java Datenbankprogrammierung 8
Thallius MySQL JDBC auf Linux Server zu mySQL DB auf anderem Linux Server wirft Access denied Datenbankprogrammierung 5
P Adressadministration mit Java und mySQL Datenbankprogrammierung 14
D MySQL Abfrage Datenbankprogrammierung 5
D MySQL Abfrage sortieren Datenbankprogrammierung 4
platofan23 MySQL Java Programm findet Treiber für mySQL auf Debian-Server nicht? Datenbankprogrammierung 11
J MySQL MySQL Risiken bei Stromausfall minimieren Datenbankprogrammierung 9
D MySQL Abfrage SUM datediff Datenbankprogrammierung 3
H MySQL MySQL - Keine Verbindung zur Datenbank?! Datenbankprogrammierung 4
G MySQL Problem mit MySQL verbindung Datenbankprogrammierung 8
X MySQL Java hat keinen Zugriff auf MySQL Datenbankprogrammierung 9
Z [JDBC][MYSQL] Access denied Datenbankprogrammierung 7
D MySQL Connection richtig herstellen. Wie ? Datenbankprogrammierung 7
D Multiple Connection mit MySQL Datenbankprogrammierung 4
D MySQL Eibinden des "mysql-connector" in eine fertige Jar Datenbankprogrammierung 3
L MySQL Android zu externer MySQL Datenbank verbinden Datenbankprogrammierung 5
P Daten in eine mySQL Datenbank einfügen Datenbankprogrammierung 4
D MySQL Zeilen kumulieren Datenbankprogrammierung 8
D MySQL Abfrage mit kumulierten Werten Datenbankprogrammierung 16
K Servlet-MySQL DB Datenbankprogrammierung 2
X MySQL Json String in MySQL einfügen. Datenbankprogrammierung 20
OnDemand Update auf Mysql läuft nicht durch Datenbankprogrammierung 30
D Datumsformat aus MySQL ändern Datenbankprogrammierung 15
G MySQL Java Problem: Nullpointer Exception obwohl Daten vorhanden sind? Datenbankprogrammierung 2
K MySQL LAN-MySQL Server mit XAMPP Datenbankprogrammierung 2
R ERModel der Datebanken (ORACLE,MySQL,MS-SQL usw) Datenbankprogrammierung 4
X MySQL In MySQL Funktionen erstellen, wenn Zelle leer dann andere Zelle ändern? Datenbankprogrammierung 9
K Anfängerfrage CSV in MySQL Datenbankprogrammierung 41
I MySQL Wert nachträglich bearbeiten Datenbankprogrammierung 1
N MySQL Datenbank lokal Datenbankprogrammierung 3
B MySQL: Port ändern über GUI? Wo und wie Port ändern? Datenbankprogrammierung 0
B MySQL installieren - silent / User anlegen Datenbankprogrammierung 3
X MySQL Verbindungdsaufbau MySql auf Ubuntu-Server Datenbankprogrammierung 10
F MySQL Wie kann ich in Java Datensätze aus einer MySQL Datenbank gezielt in einzelne Arrays schreiben? Datenbankprogrammierung 9
P MySQL JPA / MySQL - Fehler bei type=innoDB Datenbankprogrammierung 8
M MySQL MySQL DATETIME-Import Datenbankprogrammierung 9
P MySQL Connection Global Datenbankprogrammierung 13
J mySQL- Java Application - Zugriff über Internet Datenbankprogrammierung 3
P MySQL-Verbindung in anderer Klasse nutzen Datenbankprogrammierung 2
D JavaFX Anwendung zugriff auf MySQL DB. Datenbankprogrammierung 2
D MySQL Grundsätzliche Fragen zu MySQL Datenbankprogrammierung 3
B MySQL LogIn Daten im Code verstecken Datenbankprogrammierung 3
M MySQL-Syntax-Fehler Datenbankprogrammierung 1
M In MySql Datenbank schreiben Datenbankprogrammierung 6
D mySQL Timestamp in RegularTimePeriod bzw Second Datenbankprogrammierung 3
H SHOW Tables in Java/MySQL Datenbankprogrammierung 8
windl MySQL und HSQLDB Datenbankprogrammierung 4
S Anbindung zur mysql von mit Swing und AWT Datenbankprogrammierung 22
F MySQL+ Netbeans: Datenbanken mit Automatisch generierten Entity Classes get und set Datenbankprogrammierung 2
C MYSQL kann wert nicht eintragen Datenbankprogrammierung 3
D Aktualisierung einer ListView mit Daten aus MySQL-DB Datenbankprogrammierung 5
F BPlaced MySql Datenbank ansprechen Datenbankprogrammierung 5
S MySQL MySQL will einfach nicht, bitte um Rat Datenbankprogrammierung 4
M MySQL Datenbank durchsuchen Datenbankprogrammierung 5
Z MySQL mysql Facharbeit: Tipps und Ideen gesucht Datenbankprogrammierung 5
dat_vin JavaFX Datenbankverbindung über JPA und MySQL Error Datenbankprogrammierung 0
K MySQL Datenbank 2facher Zugriff Datenbankprogrammierung 1
Z MySQL Shopsystem mit mysql und Java Datenbankprogrammierung 8
S [MySQL] Topliste Datenbankprogrammierung 2
H Datenbank-Anbindung Java/MySQL Datenbankprogrammierung 2
T MySQL MySQL - Insert into fügt zwei identische Datensätze ein Datenbankprogrammierung 2
A Eine MySQL Zeile mit JDBC löschen Datenbankprogrammierung 5
J Dateien in MySQL speichern & indizieren Datenbankprogrammierung 2
B MySQL MySQL-Abfrage von aufsummierter Zeit Datenbankprogrammierung 3
K MySQL Datenbankbackups Datenbankprogrammierung 5

Ähnliche Java Themen

Neue Themen


Oben