Hallo,
ich habe zur Zeit folgendes Problem: Ich schreibe ein Programm, mit welchem dezentral in allen Tochterunternehmen Daten erfasst und in der Mutterfirma zusammengefasst werden. Der wichtige Teil ist, dass die Datensätze erst nach Firma (Client), dann nach Abteilung (Division) und innerhalb der Abteilung nochmal nach Gruppe (Branch) unterteilt werden. Division und Branch haben einen Composite Primary Key, bestehend aus einer ID und der ID des zugehörigen Clients.
Versuche ich jetzt, von Branch zu Division einen Foreign Key mit zwei Spalten zu erstellen, erhalte ich folgende Fehlermeldung:
Die beiden Klassen:
Verwendete Datenbank ist eine MySQL, die Relationen wurden von Hand angelegt und sind nach mehrmaliger Kontrolle auch richtig.
Wo sehr ihr den Fehler? Wenn ich den Foreign Key auf eine Spalte zurückschraube, sagt mir Hibernate, dass die Spaltenanzahl des Foreign Key und die des Primary Keys nicht übereinstimmen.
Danke,
Tim
ich habe zur Zeit folgendes Problem: Ich schreibe ein Programm, mit welchem dezentral in allen Tochterunternehmen Daten erfasst und in der Mutterfirma zusammengefasst werden. Der wichtige Teil ist, dass die Datensätze erst nach Firma (Client), dann nach Abteilung (Division) und innerhalb der Abteilung nochmal nach Gruppe (Branch) unterteilt werden. Division und Branch haben einen Composite Primary Key, bestehend aus einer ID und der ID des zugehörigen Clients.
Versuche ich jetzt, von Branch zu Division einen Foreign Key mit zwei Spalten zu erstellen, erhalte ich folgende Fehlermeldung:
Code:
org.hibernate.AnnotationException: A Foreign key refering com.zs.connect.model.data.Division from com.zs.connect.model.data.Branch has the wrong number of column. should be 1
Die beiden Klassen:
Java:
@Entity
public class Division implements CompositeObject, Comparable<Division> {
private static final long serialVersionUID = 7492920983604301022L;
private Integer id;
private Client client;
private String shortname;
private String description;
private List<Branch> branches;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@Id
@ManyToOne(optional = false, fetch = FetchType.LAZY)
@JoinColumn(name = "client_id")
public Client getClient() {
return client;
}
public void setClient(Client client) {
this.client = client;
}
@Column(length=5, nullable=false)
public String getShortname() {
return shortname;
}
public void setShortname(String shortname) {
this.shortname = shortname;
}
@Column(length=75, nullable=false)
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
@OneToMany(mappedBy = "division")
public List<Branch> getBranches() {
return branches;
}
public void setBranches(List<Branch> branches) {
this.branches = branches;
}
@Override
public int compareTo(Division o) {
return getShortname().compareTo(o.getShortname());
}
}
Java:
@Entity
public class Branch implements CompositeObject, Comparable<Branch> {
private static final long serialVersionUID = 3163241661510653149L;
private Integer id;
private Client client;
private Division division;
private String shortName;
private String description;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@Id
@ManyToOne(optional = false, fetch = FetchType.LAZY)
@JoinColumn(name = "client_id")
public Client getClient() {
return client;
}
public void setClient(Client client) {
this.client = client;
}
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumns({ @JoinColumn(name = "division_id"), @JoinColumn(name = "client_id") })
public Division getDivision() {
return division;
}
public void setDivision(Division division) {
this.division = division;
}
@Column(length = 5, nullable = false)
public String getShortName() {
return shortName;
}
public void setShortName(String shortName) {
this.shortName = shortName;
}
@Column(length = 30, nullable = false)
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
@Override
public boolean equals(Object obj) {
boolean equals = false;
if (obj instanceof Branch) {
Branch otherBranch = (Branch) obj;
if (otherBranch.getId() == getId() && otherBranch.getClient().equals(getClient())) {
equals = true;
}
}
return equals;
}
@Override
public int compareTo(Branch o) {
return getShortName().compareTo(o.getShortName());
}
}
Verwendete Datenbank ist eine MySQL, die Relationen wurden von Hand angelegt und sind nach mehrmaliger Kontrolle auch richtig.
Wo sehr ihr den Fehler? Wenn ich den Foreign Key auf eine Spalte zurückschraube, sagt mir Hibernate, dass die Spaltenanzahl des Foreign Key und die des Primary Keys nicht übereinstimmen.
Danke,
Tim
Zuletzt bearbeitet: