'den Oluşan Boş Birleştirme Tablosu JPA sağlayıcım olarak Hibernate kullanan 2 varlık arasında ManyToMany ilişkisini uygulamaya çalıştığım bir uygulama var.JPA ManyToMany
Çalıştığım örnek tek yönlü bir kameradır, burada bir Kamera birden fazla Lense ve Lense birden çok Kameraya sığabilir. Takip
(Sadece bunun ilgili bölümünü yapıştırarak) benim varlık sınıfı ve ...
Kamera:
@Entity
@Table(name = "CAMERAS")
public class Camera implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "CAM_ID", nullable = false)
private Long camId;
@Column(name="CAMERA_BRAND")
private String cameraBrand;
@ManyToMany(cascade={CascadeType.PERSIST, CascadeType.MERGE},fetch=FetchType.EAGER)
@JoinTable(name="CAMERA_LENS",[email protected](name="CAM_ID"),[email protected](name="LENS_ID"))
private Set<Lens> lenses = new HashSet<Lens>();
...
}
Objektif: Test-durumda
@Entity
@Table(name = "LENSES")
public class Lens implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "LENS_ID", nullable = false)
private Long lensId;
@Column(name="LENS_NAME")
private String name;
...
}
, ben bu gibi Kamera örneğini sürdürmeye çalışın ...
@Test
public void test_saveCameraLenseManyToMany() {
Camera cam = new Camera();
cam.setCameraBrand("Nikon");
Set<Camera> cameras = new HashSet<Camera>();
cameras.add(cam);
Set<Lens> lenses = new HashSet<Lens>();
Lens lens1 = new Lens();
lens1.setName("WideAngle");
lenses.add(lens1);
cam.setLenses(lenses);
// concreteDAO.saveLens(lens1);
concreteDAO.saveCamera(cam);
}
Kalıcılık başarıyla gerçekleşir ve Hazırda Bekletme tarafından atılan bir hata/istisna yoktur. Ancak, beklentinin aksine JoinTable'da bir satır oluşturulmaz (bu durumda CAMERA_LENS). Sadece Lens ve Kamera tablolarının her birinde bir satır oluşturulur, böylece ManyToMany'nin amacına hizmet etmez. Ancak, birleştirme tablosu için DDL oluşturulur ve aynı zamanda herhangi bir kayıt içermez.
Herhangi bir yardım veya işaretçi çok takdir edilecektir.
Benim durumumda, bu yardımcı olmadı. Yardımın ne olduğu belirsizdi ... (Hala bunun neden gerekli olduğunu anlamıyorum, diğer toplama güncellemeleri işlemin içinde görüldüğü gibi. Sadece ara masanın bir güncellemeye ihtiyaç duymadığı görülmedi. –
Sanırım @Transactional (readOnly = true) hala bir tx başlatacak olan GEREKLİ bir varsayılan yaymaya sahip olabilir.Aynı soruna rastladım ve @Transactional (progpagation = REQUIRED, readOnly = true) ile birleştirme, birleştirme tablosuna eklenmiyordu. @Adres, çalışmayı önerdi, ancak readOnly'yi kaldırarak – ams