我的映射有问题我很确定它是级联选项的问题,但又不知道如何解决它。在这个程序中我试图映射1个父类叫做#34; Zaposleni"一对多上课#34; Pacijenti"和一对一的课程" Zaposleni_details"但每当我坚持我的父类对象时,我会重复输入而不是仅仅将id插入到连接表中。我不会在这里发布这个问题,但我花了最后7个试图解决这个问题。 这些是我的课程
家长班:
包zavrsni;
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
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.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;
/**
*
* @author boost
*/
@Entity
@Table(name="ZAPOSLENI")
public class Zaposleni implements Serializable {
public Set<Pacijent> pacijenti = new HashSet<>(0);
private ZaposleniDetails zDetails;
private int id;
private String ime;
private String prezime;
private String kontaktTelefon;
private String posao;
private String pol;
public Zaposleni(String ime, String prezime, String kontaktTelefon, String posao, String pol,Set<Pacijent> pacijenti) {
this.pacijenti=pacijenti;
this.ime = ime;
this.prezime = prezime;
this.kontaktTelefon = kontaktTelefon;
this.posao = posao;
this.pol = pol;
}
public Zaposleni(String ime, String prezime, String kontaktTelefon, String posao, String pol) {
this.ime = ime;
this.prezime = prezime;
this.kontaktTelefon = kontaktTelefon;
this.posao = posao;
this.pol = pol;
}
public Zaposleni() {
}
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ZAPOSLENI_ID")
public int getId() {
return id;
}
@OneToOne(fetch = FetchType.LAZY,mappedBy = "zaposleni",cascade = CascadeType.ALL)
public ZaposleniDetails getzDetails() {
return zDetails;
}
public void setzDetails(ZaposleniDetails zDetails) {
this.zDetails = zDetails;
}
@OneToMany(cascade = CascadeType.ALL)
@JoinTable(name = "ZAPOSLENI_PACIJENTI", joinColumns = {
@JoinColumn(name = "ZAPOSLENI_ID")}, inverseJoinColumns = {
@JoinColumn(name = "PACIJENT_ID")})
public Set<Pacijent> getPacijenti() {
return pacijenti;
}
public void setPacijenti(Set<Pacijent> pacijenti) {
this.pacijenti = pacijenti;
}
public void setId(int id) {
this.id = id;
}
@Column(name="IME")
public String getIme() {
return ime;
}
public void setIme(String ime) {
this.ime = ime;
}
@Column(name= "PREZIME")
public String getPrezime() {
return prezime;
}
public void setPrezime(String prezime) {
this.prezime = prezime;
}
@Column(name="TELEFON")
public String getKontaktTelefon() {
return kontaktTelefon;
}
public void setKontaktTelefon(String kontaktTelefon) {
this.kontaktTelefon = kontaktTelefon;
}
@Column(name="POSAO")
public String getPosao() {
return posao;
}
public void setPosao(String posao) {
this.posao = posao;
}
@Column(name= "POL")
public String getPol() {
return pol;
}
public void setPol(String pol) {
this.pol = pol;
}
}
这是关于OneToOne的第一个Kid课程:
package zavrsni;
import java.io.Serializable;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import javax.persistence.PrimaryKeyJoinColumn;
import javax.persistence.Table;
/**
*
* @author boost
*/
@Entity
@Table(name = "ZAPOSLENIDETAILS")
public class ZaposleniDetails implements Serializable {
private int zid;
private Zaposleni zaposleni;
private String username;
private String password;
private String jmbg;
private int adminAcc;
public void setZid(int zid) {
this.zid = zid;
}
@Id
@GeneratedValue()
public int getZid() {
return zid;
}
public ZaposleniDetails() {
}
@OneToOne(fetch = FetchType.LAZY,cascade = CascadeType.ALL)
@PrimaryKeyJoinColumn
public Zaposleni getZaposleni() {
return zaposleni;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getJmbg() {
return jmbg;
}
public void setJmbg(String jmbg) {
this.jmbg = jmbg;
}
public int getAdminAcc() {
return adminAcc;
}
public void setAdminAcc(int adminAcc) {
this.adminAcc = adminAcc;
}
public void setZaposleni(Zaposleni zaposleni) {
this.zaposleni = zaposleni;
}
public ZaposleniDetails(String username, String password, String jmbg, int adminAcc) {
this.username = username;
this.password = password;
this.jmbg = jmbg;
this.adminAcc = adminAcc;
}
}
和第二个孩子班:
package zavrsni;
import java.io.Serializable;
import java.util.Calendar;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
/**
*
* @author boost
*/
@Entity
@Table(name="PACIJENTI")
public class Pacijent implements Serializable {
Calendar calendar = Calendar.getInstance();
private Zaposleni zaposleni;
private int pacijentid;
private String ime;
private String prezime;
private String kontaktTelefon;
private String usluga;
private String jmbg;
private String pol;
public Pacijent() {
}
@Column(name="KALENDAR")
public Calendar getCalendar() {
return calendar;
}
public void setCalendar(Calendar calendar) {
this.calendar = calendar;
}
public Pacijent(String ime, String prezime, String usluga, String jmbg) {
this.ime = ime;
this.prezime = prezime;
this.jmbg = jmbg;
}
@Id
@GeneratedValue()
@Column(name = "PACIJENT_ID")
public int getPacijentid() {
return pacijentid;
}
@Column(name="JMBG")
public String getJmbg() {
return jmbg;
}
public void setJmbg(String jmbg) {
this.jmbg = jmbg;
}
@Column(name="POL")
public String getPol() {
return pol;
}
public void setPol(String pol) {
this.pol = pol;
}
@Column(name="USLUGA")
public String getUsluga() {
return usluga;
}
public void setUsluga(String usluga) {
this.usluga = usluga;
}
public Pacijent(String ime, String prezime) {
this.ime = ime;
this.prezime = prezime;
}
public Pacijent(String ime, String prezime, String kontaktTelefon) {
this.ime = ime;
this.prezime = prezime;
this.kontaktTelefon = kontaktTelefon;
}
@Column(name="IME")
public String getIme() {
return ime;
}
public void setIme(String ime) {
this.ime = ime;
}
@Column(name="PREZIME", nullable = false, length = 15)
public String getPrezime() {
return prezime;
}
public void setPrezime(String prezime) {
this.prezime = prezime;
}
@Column(name="TELEFON", nullable = false, length = 15)
public String getKontaktTelefon() {
return kontaktTelefon;
}
public void setKontaktTelefon(String kontaktTelefon) {
this.kontaktTelefon = kontaktTelefon;
}
public void setPacijentid(int pacijentid) {
this.pacijentid = pacijentid;
}
public Pacijent( String ime, String prezime, String kontaktTelefon, String usluga, String jmbg, String pol) {
this.ime = ime;
this.prezime = prezime;
this.kontaktTelefon = kontaktTelefon;
this.usluga = usluga;
this.jmbg = jmbg;
this.pol = pol;
}
}
hibernate.cfg.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/stomatoloska_ordinacija?zeroDateTimeBehavior=convertToNull</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">jurasic2</property>
<property name="connection.pool_size">1</property>
<property name ="show_sql">true</property>
<property name="hbm2ddl.auto">create</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.connection.autocommit">true</property>
<mapping class="zavrsni.Pacijent"/>
<mapping class="zavrsni.Zaposleni"/>
<mapping class="zavrsni.ZaposleniDetails"/>
</session-factory>
</hibernate-configuration>
和代码我坚持
Session session=HibernateUtil.getFactory().openSession();
Transaction tx = session.beginTransaction();
Set<Pacijent> pacijenti = new HashSet<>();
pacijenti.add(new Pacijent("imedoz", "prezedos", "1231231", "uslugica", "1312992710085", "muski"));
pacijenti.add(new Pacijent("qwez", "ssss", "44444", "ussssslugica", "1312442710085", "zenski"));
Zaposleni z1 = new Zaposleni("ime", "prezime", "kontakt telefon", "posao", "pol",pacijenti);
ZaposleniDetails zd = new ZaposleniDetails("qwe", "qwe", "1312992710085", 1);
zd.setZaposleni(z1);
z1.setzDetails(zd);
session.save(z1);
tx.commit();
session.close();