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:
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:
Klasse-Sex:
Klasse-Denomination:
So und nun, wenn ich eine Testklasse schreibe um das zu testen, dann bekomme ich eine Fehlermeldung...
Meine Testklasse sieht so aus:
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
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:

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: