J'ai 3 classes à savoir Satislar
, Urunler
et Musteriler
OneToOne Mapping ne précise pas l'objet mis en correspondance
En classe Satislar, il y a 2 clés étrangères: urunid
et musteriid
Chaque objet Satislar
a un objet Urunler
et un Musteriler
objet.
J'ai donc besoin de deux mappages OneToOne différents dans ma classe Satislar
. D'abord à Urunler
et ensuite à Musteriler
.
Lorsque j'ajoute un nouvel objet Satislar à la base de données, j'utilise l'objet existant Musteriler
et l'objet Urunler
. Le code ne doit pas créer de nouveaux objets Musteriler
, Urunler
. Pour atteindre que je l'ai utilisé
(insertable= false, updatable=false)
Mais je ne peux pas définir Urunler
et Musteriler
objets à un objet Satislar
. Il est dit:
La colonne n'autorise pas les valeurs nulles. INSERT échoue.
Je pense que j'ai un problème avec les annotations.
Voici mes blocs de code.
...
Session session = null;
Urunler urun = gelenUrunler.get(tblUrunler.getSelectedRow());
Musteriler musteri = gelenMusteriler.get(cmbMusteriler.getSelectedIndex());
System.out.println(musteri.getId() + "asd " + urun.getId());
Satislar satis = new Satislar();
satis.setUrun(urun);
satis.setMusteri(musteri);
satis.setAdet(Integer.valueOf(txtAdet.getText().trim()));
satis.setTarih(new Date());
try {
session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
session.save(satis);
session.getTransaction().commit();
} catch (Exception e) {
System.out.println("Satış sırasında hata oluştu." + e);
} finally {
session.close();
}
...
classe Satislar:
...
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "id")
private Integer id;
@Basic(optional = false)
@Column(name = "urunid", insertable = false, updatable = false)
private Integer urunid;
@Basic(optional = false)
@Column(name = "adet")
private Integer adet;
@Basic(optional = false)
@Column(name = "musteriid", insertable = false, updatable = false)
private Integer musteriid;
@Basic(optional = false)
@Column(name = "tarih")
@Temporal(TemporalType.TIMESTAMP)
private Date tarih;
@OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name = "urunid", insertable = false, updatable = false)
private Urunler urun;
public Urunler getUrun() {
return urun;
}
public void setUrun(Urunler urun) {
this.urun = urun;
}
@OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name = "musteriid", insertable = false, updatable = false)
private Musteriler musteri;
public Musteriler getMusteri() {
return musteri;
}
public void setMusteri(Musteriler musteri) {
this.musteri = musteri;
}
...
J'ai fait des erreurs simples à cause de ceci est mon premier projet avec Hibernate. Votre réponse l'a résolu. Merci. La raison pour laquelle urunid et musteriid est là, j'ai complètement oublié de les supprimer. Et je pensais insérable et modifiable est utilisé pour empêcher l'autre table de changer. Je pense que les options en cascade font cela. J'ai changé OneToOne en ManyTo One. C'était ma plus grosse erreur. –