我有一个名为Urunler的班级,还有一个名为Kategoriler的班级。
Urunler表具有外键,这是Kategoriler表的主键。
一个Kategoriler对象可以具有多个Urunler对象。

我需要从Urunler类到Kategoriler类的ManyToOne映射。
但是我无法实现。

错误告诉我我尚未设置Urunler表的katid外键。

这是我的代码:

@Entity
@Table(name = "urunler")
@XmlRootElement
@NamedQueries({
@NamedQuery(name = "Urunler.findAll", query = "SELECT u FROM Urunler u"),
@NamedQuery(name = "Urunler.findById", query = "SELECT u FROM Urunler u WHERE u.id = :id"),
@NamedQuery(name = "Urunler.findByAd", query = "SELECT u FROM Urunler u WHERE u.ad = :ad"),

@NamedQuery(name = "Urunler.findByAlis", query = "SELECT u FROM Urunler u WHERE u.alis = :alis"),
@NamedQuery(name = "Urunler.findBySatis", query = "SELECT u FROM Urunler u WHERE u.satis = :satis"),
@NamedQuery(name = "Urunler.findByStok", query = "SELECT u FROM Urunler u WHERE u.stok = :stok"),
@NamedQuery(name = "Urunler.findByAciklama", query = "SELECT u FROM Urunler u WHERE u.aciklama = :aciklama"),
@NamedQuery(name = "Urunler.findByKatid", query = "SELECT u FROM Urunler u WHERE u.katid = :katid")})
public class Urunler implements Serializable {

private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "id")
private Integer id;

@ManyToOne(cascade = CascadeType.ALL)
private Kategoriler kategori;

public Kategoriler getKategori() {
    return kategori;
}

public void setKategori(Kategoriler kategori) {
    this.kategori = kategori;
}

@Basic(optional = false)
@Column(name = "ad")
private String ad;
@Basic(optional = false)
@Column(name = "alis")
private String alis;
@Basic(optional = false)
@Column(name = "satis")
private String satis;
@Basic(optional = false)
@Column(name = "stok")
private String stok;
@Column(name = "aciklama")
private String aciklama;
@Basic(optional = false)
@Column(name = "katid")
private Integer katid;

public Integer getKatid() {
    return katid;
}

public void setKatid(Integer katid) {
    this.katid = katid;
}

public Urunler() {
}

public Urunler(Integer id) {
    this.id = id;
}

public Urunler(Integer id, String ad, String kategori, String alis, String satis, String stok, int katid) {
    this.id = id;
    this.ad = ad;

    this.alis = alis;
    this.satis = satis;
    this.stok = stok;

}

public Integer getId() {
    return id;
}

public void setId(Integer id) {
    this.id = id;
}

public String getAd() {
    return ad;
}

public void setAd(String ad) {
    this.ad = ad;
}

public String getAlis() {
    return alis;
}

public void setAlis(String alis) {
    this.alis = alis;
}

public String getSatis() {
    return satis;
}

public void setSatis(String satis) {
    this.satis = satis;
}

public String getStok() {
    return stok;
}

public void setStok(String stok) {
    this.stok = stok;
}

public String getAciklama() {
    return aciklama;
}

public void setAciklama(String aciklama) {
    this.aciklama = aciklama;
}

@Override
public int hashCode() {
    int hash = 0;
    hash += (id != null ? id.hashCode() : 0);
    return hash;
}

@Override
public boolean equals(Object object) {
    // TODO: Warning - this method won't work in the case the id fields are not set
    if (!(object instanceof Urunler)) {
        return false;
    }
    Urunler other = (Urunler) object;
    if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
        return false;
    }
    return true;
}

@Override
public String toString() {
    return "HibClasses.Urunler[ id=" + id + " ]";
 }

}


而这个Kategoriler类:

@Entity
@Table(name = "kategoriler")
@XmlRootElement
@NamedQueries({
@NamedQuery(name = "Kategoriler.findAll", query = "SELECT k FROM Kategoriler k"),
@NamedQuery(name = "Kategoriler.findById", query = "SELECT k FROM Kategoriler k WHERE k.id = :id"),
@NamedQuery(name = "Kategoriler.findByAd", query = "SELECT k FROM Kategoriler k WHERE k.ad = :ad"),
@NamedQuery(name = "Kategoriler.findByAciklama", query = "SELECT k FROM Kategoriler k WHERE k.aciklama = :aciklama")})
public class Kategoriler implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
@Basic(optional = false)
@Column(name = "id")
private Integer id;
@Column(name = "ad")
private String ad;
@Column(name = "aciklama")
private String aciklama;

public Kategoriler() {
}

public Kategoriler(Integer id) {
    this.id = id;
}

public Integer getId() {
    return id;
}

public void setId(Integer id) {
    this.id = id;
}

public String getAd() {
    return ad;
}

public void setAd(String ad) {
    this.ad = ad;
}

public String getAciklama() {
    return aciklama;
}

public void setAciklama(String aciklama) {
    this.aciklama = aciklama;
}

@Override
public int hashCode() {
    int hash = 0;
    hash += (id != null ? id.hashCode() : 0);
    return hash;
}

@Override
public boolean equals(Object object) {
    // TODO: Warning - this method won't work in the case the id fields are not set
    if (!(object instanceof Kategoriler)) {
        return false;
    }
    Kategoriler other = (Kategoriler) object;
    if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
        return false;
    }
    return true;
}

@Override
public String toString() {
    return "HibClasses.Kategoriler[ id=" + id + " ]";
}

}


这就是我称呼他们的地方:

btnDuzenle.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent ae) {

           Session session = HibernateUtil.getSessionFactory().openSession();

            session.beginTransaction();
            Urunler urunler = new Urunler();
            Kategoriler kategoriler = new Kategoriler();
            kategoriler.setAd("Gıda");
            kategoriler.setAciklama("Yenir la bunlar");

            urunler.setAd("Bisküvi");
            urunler.setAciklama("Biskrem");
            urunler.setAlis("4");
            urunler.setSatis("5");
            urunler.setKategori(kategoriler);
            urunler.setStok("4");



            session.save(urunler);
            session.getTransaction().commit();

        }
    });

最佳答案

我找到了解决方案。

我变了

...
@ManyToOne(cascade = CascadeType.ALL)
private Kategoriler kategori;

public Kategoriler getKategori() {
return kategori;
}
...


对此:

...
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "katid")
private Kategoriler kategori;

public Kategoriler getKategori() {
return kategori;
}
...




...
@Column(name = "katid")
private Integer katid;

public Integer getKatid() {
return katid;
}
...


对此:

...
@Column(name = "katid", insertable = false , updatable = false)
private Integer katid;

public Integer getKatid() {
return katid;
}
...

07-28 09:52