hibernate映射anotations重复父表插入

时间:2017-10-09 18:29:42

标签: java mysql hibernate insert repeat

我的映射有问题我很确定它是级联选项的问题,但又不知道如何解决它。在这个程序中我试图映射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();

0 个答案:

没有答案