3 tabloya karşılık gelen 3 sınıfım var V
, D
ve P
. D
, FK'ye V
(FK_V
) sahip ve OneToMany ilişkisini kullanarak katılmaktadır. Ayrıca bunların çıkışları, bu V
, D
ve P
arasındaki ilişkiye sahip olan bir 4. tablo V_D_P
'dan çıkar.Hazırda iki kez aynı nesneyi sürdürmeye çalışırken hazırda bekletme
@Entity
@Table(name = "V")
public class V {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
@Column(name = "ID")
private Long id;
@OneToMany(cascade=CascadeType.ALL)
@JoinColumn(name = "FK_V", referencedColumnName="Id", nullable = false)
private Set<D> d;
@OneToMany(cascade=CascadeType.ALL)
@JoinColumn(name = "FK_V", referencedColumnName="Id", nullable = false)
private Set<V_D_P> vdp;
//Getters Setters etc.
}
@Entity
@Table(name = "V_D_P")
public class V_D_P {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
@Column(name = "ID")
private Long id;
@ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name = "FK_D", nullable = false)
private D d;
@ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name = "FK_P", nullable = false)
private P p;
//Getters Setters etc.
}
@Entity
@Table(name = "D")
public class D {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
@Column(name = "ID")
private Long id;
//Getters Setters etc.
}
@Entity
@Table(name = "P")
public class P {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
@Column(name = "ID")
private Long id;
//Getters Setters etc.
}
Sevgilerine ilişkisi ile birlikte V
, D
ve P
devam etmek istiyorum: Aşağıdaki
gibi bu görünüm için veri modeli budur. Ben şimdi ben iki kez aynı d
nesneyi ekliyorum görebilirsiniz
V v = new V();
D d = new D();
Set<D> dSet = new HashSet<>();
dSet.add(d);
v.setD(dSet); // Adding d to V ....(1)
P p = new P();
V_D_P vdp = new V_D_P();
vdp.setD(d); // Adding d to V_D_P ....(2)
vdp.setP(p);
Set<V_D_P> vdpSet = new HashSet<V_D_P>();
vdpSet.add(vdp);
v.setVdp(vdpSet);
entityManager.persist(v);
duyuyorum. Bir kez P'ye ve bir kez V_D_P'ye. Ancak bunlar aynı nesneler olduğu için, sadece bir kez kalmalıdır. Ancak hazırda bekletme günlüklerine dayanarak hazırda beklemenin 2 farklı nesne eklemeye çalıştığını görüyorum.
ORA-00001: benzersiz kısıtlama
bu aynı nesneler olduğunu hazırda bekletme ve yalnızca bir kez Persis izin için bir yol var mı
şunlarla duruma bakın?
Sorununuzu yeniden oluşturamadım; 'D' için yalnızca bir tane ekleme ifadesi oluşturulur. Tüm ek açıklamalar javax.persistence. * 'Paketinden mi? –
@DraganBozanovic: Evet. Her iki ek açıklama da javax.persistence. * Paketindedir. Aynı objeyi (dSet.add (d); & vdp.setD (d);) gibi iki kez eklediğinize ve sonra ikisini de sürdürmeye çalıştığınıza emin misiniz? –
Evet, gönderdiğiniz kodu kopyalayıp yapıştırdım. [Burada] (http://pastie.org/10341717) Hazırda Bekletilen SQL'dir; H2 veritabanı ('org.hibernate.dialect.H2Dialect') ile denedim. Hangi lehçeyi kullanıyorsunuz ve davada Hibernate tarafından oluşturulan SQL'i gönderebilirsiniz? –