1

我是 Hibernate/JPA 的新手,并且在理解所有这些注释的 JPA 持久性方面遇到了一些问题。我有 2 个简单的实体,两者之间存在 OneToMany/ManyToOne 关系,但我不明白两者之间的持久性是如何工作的。

这是我的实体和关系:

@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!

现在这是我不明白的部分......我认为通过设置这两个关系,两个实体链接在一起,所以当我添加/删除一个时,另一个会更新。

但是当我通过 DeviceEntity 添加警报时,警报实体会更新,但是当我通过警报实体添加警报时,设备实体不会更新。这个对吗?我错过了什么吗?如果是这样,那么拥有警报实体和关系有什么意义?

--更新:TL;DR --

这是我的主要问题:当我更新一个实体并设置一个标记为@ManyToOne 的字段时,它是否会自动保留到与之链接的另一个表中?

所以在上面的例子中,如果我创建一个新的 AlertEntity 并设置 DeviceEntity 字段,当我说 DeviceEntity.getAlerts() 时,这个警报是否会在我的 DeviceEntity 中的 Set 中可用?

4

0 回答 0