У меня есть приложение, в котором я пытаюсь реализовать отношение ManyToMany между 2 использованиями объектов, в спящем режиме как мой поставщик JPA.
Примером, который я пробую, является однонаправленный, где Камера может иметь несколько Lenses, и Lense может вписаться в несколько Камер.
Следующее является моим классом объекта... (Просто вставка соответствующей части его)
Камера:
@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",joinColumns=@JoinColumn(name="CAM_ID"),inverseJoinColumns=@JoinColumn(name="LENS_ID"))
private Set<Lens> lenses = new HashSet<Lens>();
...
}
Линза:
@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;
...
}
В тестовом сценарии я пытаюсь сохранить экземпляр Камеры как это...
@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);
}
Персистентность происходит успешно, и нет никакой ошибки/исключения, брошенной, в спящем режиме. Однако вопреки ожиданию, строка не создается в JoinTable (CAMERA_LENS в этом случае). Строка создается в каждой из таблиц Lens и Camera только, таким образом, не служа цели ManyToMany. Однако DDL сгенерирован для объединяющей таблицы, и это создается также, но просто что это не имеет никаких записей.
Любая помощь или указатели очень ценились бы.