Dalej nie mogę sobie z tym poradzić wrzucę teraz klasy i mapowania dokładnie programiku który robię bo różni się on trochę od tego co podałem w pierwszym poście:
Roboty 1..* Pracownicy_roboty *..1 Pracownicy
id_roboty id_roboty id_pracownika
id_miesiaca id_pracownika imie
nazwa l_godz nazwisko
stawka aktywny
Pracownicy.hbm.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="wyplaty.Pracownicy" table="Pracownicy">
<id column="id_pracownika" name="id_pracownika" type="int">
<generator class="native"/>
</id>
<set name="pracownicy_wyplata" table="Pracownicy_roboty" inverse="true">
<key column="id_pracownika" foreign-key="FK_Pracownicy_roboty_Pracownicy"/>
<many-to-many class="wyplaty.Roboty" column="id_roboty"
foreign-key="FK_Pracownicy_roboty_Roboty"/>
</set>
<property column="imie" name="imie" type="string"/>
<property column="nazwisko" name="nazwisko" type="string"/>
<property column="aktywny" name="aktywny" type="boolean"/>
</class>
</hibernate-mapping>
Pracownicy.java
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package wyplaty;
import java.util.*;
/**
*
* @author Malak
*/
public class Pracownicy {
private String imie;
private String nazwisko;
private int id_pracownika;
private boolean aktywny;
private Set pracownicy_wyplata = new HashSet();
public Pracownicy(String imie, String nazwisko, boolean aktywny) {
this.imie = imie;
this.nazwisko = nazwisko;
this.aktywny = aktywny;
this.pracownicy_wyplata = new HashSet();
}
private Pracownicy(){
}
public Set getPracownicy_wyplata() {
return pracownicy_wyplata;
}
public void setPracownicy_wyplata(Set pracownicy_wyplata) {
this.pracownicy_wyplata = pracownicy_wyplata;
}
public int getId_pracownika() {
return id_pracownika;
}
public void setId_pracownika(int id_pracownika) {
this.id_pracownika = id_pracownika;
}
public boolean isAktywny() {
return aktywny;
}
public void setAktywny(boolean aktywny) {
this.aktywny = aktywny;
}
public String getNazwisko() {
return nazwisko;
}
public void setNazwisko(String nazwisko) {
this.nazwisko = nazwisko;
}
public String getImie() {
return imie;
}
public void setImie(String imie) {
this.imie = imie;
}
}
Roboty.hbm.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="wyplaty.Roboty" table="Roboty">
<id column="id_roboty" name="id_roboty" type="int">
<generator class="native"/>
</id>
<set name="pracownicy_wyplata" table="Pracownicy_roboty" inverse="true">
<key column="id_roboty" foreign-key="FK_Pracownicy_roboty_Roboty"/>
<many-to-many class="wyplaty.Pracownicy" column="id_pracownika"
foreign-key="FK_Pracownicy_roboty_Pracownicy"/>
</set>
<property column="nazwa" name="nazwa" type="string"/>
<many-to-one class="wyplaty.Miesiace" column="id_miesiaca" foreign-key="FK_Roboty_miesiace" name="miesiace" not-null="true"/>
</class>
</hibernate-mapping>
Roboty.java
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package wyplaty;
import java.util.*;
/**
*
* @author Malak
*/
public class Roboty {
private int id_roboty;
private String nazwa;
private Miesiace miesiace;
private Set pracownicy_wyplata = new HashSet();
public Roboty(String nazwa, Miesiace miesiace) {
this.nazwa = nazwa;
this.miesiace = miesiace;
this.pracownicy_wyplata = new HashSet();
}
public Roboty() {
}
public Set getPracownicy_wyplata() {
return pracownicy_wyplata;
}
public void setPracownicy_wyplata(Set pracownicy_wyplata) {
this.pracownicy_wyplata = pracownicy_wyplata;
}
public Miesiace getMiesiace() {
return miesiace;
}
public void setMiesiace(Miesiace miesiace) {
this.miesiace = miesiace;
}
public String getNazwa() {
return nazwa;
}
public void setNazwa(String nazwa) {
this.nazwa = nazwa;
}
public int getId_roboty() {
return id_roboty;
}
public void setId_roboty(int id_roboty) {
this.id_roboty = id_roboty;
}
}
Pracownicy_roboty.hbm.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="wyplaty.Pracownicy_roboty" table="Pracownicy_roboty" mutable="false">
<composite-id name="id" class="wyplaty.Pracownicy_roboty_PK">
<key-property name="id_pracownika"
access="field"
column="id_pracownika"/>
<key-property name="id_roboty"
access="field"
column="id_roboty"/>
</composite-id>
<property column="l_godz" name="l_godz" type="int"/>
<property column="stawka" name="stawka" type="double"/>
<many-to-one
class="wyplaty.Pracownicy"
column="id_pracownika"
foreign-key="FK_Pracownicy_roboty_Pracownicy"
name="pracownicy"
not-null="true"
insert="false"
update="false"/>
<many-to-one
class="wyplaty.Roboty"
column="id_roboty"
foreign-key="FK_Pracownicy_roboty_Roboty"
name="roboty"
not-null="true"
insert="false"
update="false"/>
</class>
</hibernate-mapping>
Pracownicy_roboty.java
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package wyplaty;
/**
*
* @author Malak
*/
public class Pracownicy_roboty {
private int l_godz;
private double stawka;
private Roboty roboty;
private Pracownicy pracownicy;
public Pracownicy_roboty() {
}
public Pracownicy_roboty(int l_godz, double stawka, Roboty roboty, Pracownicy pracownicy) {
this.l_godz = l_godz;
this.stawka = stawka;
this.roboty = roboty;
this.pracownicy = pracownicy;
}
public Pracownicy getPracownicy() {
return pracownicy;
}
public void setPracownicy(Pracownicy pracownicy) {
this.pracownicy = pracownicy;
}
public Roboty getRoboty() {
return roboty;
}
public void setRoboty(Roboty roboty) {
this.roboty = roboty;
}
public double getStawka() {
return stawka;
}
public void setStawka(double stawka) {
this.stawka = stawka;
}
public int getL_godz() {
return l_godz;
}
public void setL_godz(int l_godz) {
this.l_godz = l_godz;
}
}
Pracownicy_roboty_PK.java
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package wyplaty;
/**
*
* @author Malak
*/
public class Pracownicy_roboty_PK {
private int id_roboty;
private int id_pracownika;
public Pracownicy_roboty_PK() {
}
public Pracownicy_roboty_PK(int id_roboty, int id_pracownika) {
this.id_roboty = id_roboty;
this.id_pracownika = id_pracownika;
}
public int getId_roboty() {
return id_roboty;
}
public void setId_roboty(int id_roboty) {
this.id_roboty = id_roboty;
}
public int getId_pracownika() {
return id_pracownika;
}
public void setId_pracownika(int id_pracownika) {
this.id_pracownika = id_pracownika;
}
}
Wygląda to tak. Podczas parsowania Pracownicy_roboty.hbm.xml pojawia się taki błąd
WARNING: composite-id class does not override hashCode(): wyplaty.Pracownicy_roboty_PK
Exception in thread "main" org.hibernate.MappingException: composite-id class must implement Serializable: wyplaty.Pracownicy_roboty_PK
at org.hibernate.mapping.RootClass.checkCompositeIdentifier(RootClass.java:220)
at org.hibernate.mapping.RootClass.validate(RootClass.java:201)
at org.hibernate.cfg.Configuration.validate(Configuration.java:1102)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1287)
at wyplaty.Main.main(Main.java:28)
Nie wiem co teraz zrobic. Myśle ze mam błędy w tym pliku. Nie wiem także czy określiłem dobrze PK dla tej tabeli i czy ją się odwzorowuje w hbm.xml. Proszę o przejrzenie kodu i naniesienie poprawek. Z góry bardzo dziekuję:)