0

hibernateを使用してデータベースのテキストフィールドから値を挿入しようとしていますが、機能しません。たとえば、次の列があるProductテーブルに挿入したいとします:idproduct、idprovider、idcategory、name、quantity。

    Session session = HibernateUtil.getSessionFactory().openSession();
    org.hibernate.Transaction tx = session.beginTransaction();
    Product product = new Product();
    int idProduct = Integer.parseInt(IdProductTextField.getText());
    product.setIdproduct(idProduct);
    session.save(product);
    tx.commit();

setメソッドにはintパラメーターがあるため、これが挿入される唯一の列です。

ただし、他のすべての列は機能しません。そしてここに問題があります:

Productテーブルに挿入する他の列の他のすべてのsetメソッドには、パラメーターとしてClass変数があります。例えば:

idproviderを挿入する場合、このためのsetメソッドは次のとおりです。

public void setProduct(Product product) {
    this.product = product;
}

そして、私はこのメソッドを使用してidproviderを挿入する方法を本当に知りません。

時間がないので、できるだけ早く助けていただければ幸いです。

ここにProduct.javaとProvider.javaを添付します

package sakila.entity;

import java.util.HashSet;
import java.util.Set;

public class Product  implements java.io.Serializable {

 private int idproduct;
 private Istoricprod istoricprod;
 private Provider provider;
 private Category category;
 private String name;
 private Integer quantity;
 private String unitmas;
 private Set comdetals = new HashSet(0);
 private Set stocs = new HashSet(0);
 private Set bondetals = new HashSet(0);

public Product() {
}


public Product(int idproduct) {
    this.idproduct = idproduct;
}
public Product(int idproduct, Istoricprod istoricprod, Provider provider, Category category, String name, Integer quantity, String unitmas, Set comdetals, Set stocs, Set bondetals) {
   this.idproduct = idproduct;
   this.istoricprod = istoricprod;
   this.provider = provider;
   this.category = category;
   this.name = name;
   this.quantity = quantity;
   this.unitmas = unitmas;
   this.comdetals = comdetals;
   this.stocs = stocs;
   this.bondetals = bondetals;
}

public int getIdproduct() {
    return this.idproduct;
}

public void setIdproduct(int idproduct) {
    this.idproduct = idproduct;
}
public Istoricprod getIstoricprod() {
    return this.istoricprod;
}

public void setIstoricprod(Istoricprod istoricprod) {
    this.istoricprod = istoricprod;
}
public Provider getProvider() {
    return this.furnizor;
}

public void setProvider(Provider provider) {
    this.provider = provider;
}
public Category getCategory() {
    return this.category;
}

public void setCategory(Category category) {
    this.category = category;
}

public String getName() {
    return this.name;
}

public void setName(String name) {
    this.name = name;
}
public Integer getQuantity() {
    return this.quantity;
}

public void setQuantitaty(Integer quantity) {
    this.quantity = quantity;
}
public String getUnitmas() {
    return this.unitmas;
}

public void setUnitmas(String unitmas) {
    this.unitmas = unitmas;
}
public Set getComdetals() {
    return this.comdetals;
}

public void setComdetals(Set comdetals) {
    this.comdetals = comdetals;
}
public Set getStocs() {
    return this.stocs;
}

public void setStocs(Set stocs) {
    this.stocs = stocs;
}
public Set getBondetals() {
    return this.bondetals;
}

public void setBondetals(Set bondetals) {
    this.bondetals = bondetals;
}

}

そしてProvider.javaは

package sakila.entity;

// HibernateTools3.2.1.GAによって2012年4月9日22:19:40に生成

import java.util.HashSet;
import java.util.Set;


public class Provider  implements java.io.Serializable {


 private int idprovider;
 private String denumire;
 private Integer codfiscal;
 private Integer nrfirma;
 private String stradadom;
 private Integer numardom;
 private String orasdom;
 private String judetdom;
 private Integer telefon;
 private Integer codiban;
 private String banca;
 private Set produses = new HashSet(0);
 private Set chitantas = new HashSet(0);
 private Set comandas = new HashSet(0);
 private Set facturas = new HashSet(0);

public Provider() {
}


public Provider(int idprovider) {
    this.idprovider = idprovider;
}
public Provider(int idprovider, String denumire, Integer codfiscal, Integer nrfirma, String stradadom, Integer numardom, String orasdom, String judetdom, Integer telefon, Integer codiban, String banca, Set produses, Set chitantas, Set comandas, Set facturas) {
   this.idprovider = idprovider;
   this.denumire = denumire;
   this.codfiscal = codfiscal;
   this.nrfirma = nrfirma;
   this.stradadom = stradadom;
   this.numardom = numardom;
   this.orasdom = orasdom;
   this.judetdom = judetdom;
   this.telefon = telefon;
   this.codiban = codiban;
   this.banca = banca;
   this.produses = produses;
   this.chitantas = chitantas;
   this.comandas = comandas;
   this.facturas = facturas;
}

public int getIdprovider() {
    return this.idprovider;
}

public void setIdprovider(int idprovider) {
    this.idprovider = idprovider;
}
public String getDenumire() {
    return this.denumire;
}

public void setDenumire(String denumire) {
    this.denumire = denumire;
}
public Integer getCodfiscal() {
    return this.codfiscal;
}

public void setCodfiscal(Integer codfiscal) {
    this.codfiscal = codfiscal;
}
public Integer getNrfirma() {
    return this.nrfirma;
}

public void setNrfirma(Integer nrfirma) {
    this.nrfirma = nrfirma;
}
public String getStradadom() {
    return this.stradadom;
}

public void setStradadom(String stradadom) {
    this.stradadom = stradadom;
}
public Integer getNumardom() {
    return this.numardom;
}

public void setNumardom(Integer numardom) {
    this.numardom = numardom;
}
public String getOrasdom() {
    return this.orasdom;
}

public void setOrasdom(String orasdom) {
    this.orasdom = orasdom;
}
public String getJudetdom() {
    return this.judetdom;
}

public void setJudetdom(String judetdom) {
    this.judetdom = judetdom;
}
public Integer getTelefon() {
    return this.telefon;
}

public void setTelefon(Integer telefon) {
    this.telefon = telefon;
}
public Integer getCodiban() {
    return this.codiban;
}

public void setCodiban(Integer codiban) {
    this.codiban = codiban;
}
public String getBanca() {
    return this.banca;
}

public void setBanca(String banca) {
    this.banca = banca;
}
public Set getProduses() {
    return this.produses;
}

public void setProduses(Set produses) {
    this.produses = produses;
}
public Set getChitantas() {
    return this.chitantas;
}

public void setChitantas(Set chitantas) {
    this.chitantas = chitantas;
}
public Set getComandas() {
    return this.comandas;
}

public void setComandas(Set comandas) {
    this.comandas = comandas;
}
public Set getFacturas() {
    return this.facturas;
}

public void setFacturas(Set facturas) {
    this.facturas = facturas;
}

}

4

2 に答える 2

0

明確にするために、製品とそのプロバイダーの間には多対1の関係があります。製品を挿入するときは、既存のプロバイダーにリンクする必要があります。したがって、指定されたIDを持つプロバイダーを取得し、このプロバイダーを製品に接続します。

Provider provider = (Provider) session.load(Provider.class, idOfTheProvider);
product.setProvider(provider);
session.save(product);

同じことが他の協会にも当てはまります。

于 2012-05-24T09:53:40.180 に答える
-1

プロバイダーを例にとってみましょう。既存のプロバイダーのプロバイダーIDがある場合は、次のことができます。

  • 最初にIDをプロバイダーにロードします
  • プロバイダーを製品に設定します
  • 製品を保存する

例(完全ではありません)

Provider provider = session.load(provider, idProvider);
product.setProvider(provider);
session.save(product);

最初にプロバイダーをロードしたくない場合(おそらく余分なデータベースアクセス)、次のことができます。

Provider provider = new Provider(idProvider);
product.setProvider(provider);
session.save(product);

この場合、マッピングファイルで;cascadeに設定されていることを確認してください。noneそうでない場合は、新しいプロバイダーも作成されます(新しいプロバイダーも作成する場合は、を設定しますcascade=all)。

3番目の可能性は、製品にプロバイダーオブジェクトを配置せず、プロバイダーIDのみを配置し、それを単純な整数としてマップすることです。(個別のIDとプロバイダーオブジェクトの両方を配置することもできますが、これは少し注意が必要であり、通常はお勧めしません。)

于 2012-05-24T10:07:23.417 に答える