私は Hibernate/JPA が初めてで、これらすべての注釈で JPA の永続性を理解するのに問題があります。2 つの間に OneToMany/ManyToOne の関係を持つ 2 つの単純なエンティティがあり、2 つの間の永続性がどのように機能するかを理解していません。
ここに私のエンティティと関係があります:
@Entity
@Table(name = "DEVICE_TABLE")
public class DeviceEntity implements Serializable {
...
@Id
private String serialNumber;
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "deviceEntity")
private Set<AlertsEntity> alerts = new HashSet<AlertsEntity>(0);
...
@Entity
@Table(name = "ALERT_TABLE")
public class AlertsEntity implements Serializable {
...
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "serialNumber", nullable = false)
private DeviceEntity deviceEntity;
...
そして、これが私がDAOを間に使用してそれらを使用しようとしている方法です:
String serialNumber = "asdf";
DeviceEntity device = new DeviceEntity(serialNumber, new HashSet<AlertsEntity>());
deviceService.addDeviceEntity(device);
AlertsEntity alertEntity = new AlertsEntity(device, "Alert1");
device.getAlerts().add(alertEntity);
alertService.addAlertsEntity(new AlertsEntity(device, "Alert2"));
List<AlertsJson> alertsFromDeviceService = deviceService.getJsonableAlerts(serialNumber);
List<AlertsJson> alertsFromAlertService = alertService.getJsonableAlerts(device);
assertEquals(2, alertsFromAlertService.size()); //passes
assertEquals(2, alertsFromDeviceService.size()); //FAILS!
ここで私が理解していない部分があります...これら2つの関係を設定することで、2つのエンティティがリンクされていると考えられたため、一方を追加/削除すると、もう一方が更新されます。
しかし、DeviceEntity を介してアラートを追加すると、アラート エンティティは更新されますが、アラート エンティティを介してアラートを追加すると、デバイス エンティティは更新されません。これは正しいです?何か不足していますか?その場合、アラート エンティティと関係を持つことに何の意味があるのでしょうか。
--更新: TL;DR --
主な質問は次のとおりです。エンティティを更新し、@ManyToOne とマークされたフィールドを設定すると、それがリンクされている他のテーブルに自動的に保持されますか?
上記の例で、新しい AlertEntity を作成して DeviceEntity フィールドを設定した場合、DeviceEntity.getAlerts() と言ったときに、このアラートは DeviceEntity 内の Set で使用できますか?