1

私は 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 で使用できますか?

4

0 に答える 0