JPA @OneToMany仍然存在,但@ManyToOne不会持续存在

时间:2013-03-22 20:39:50

标签: hibernate jpa

我是Hibernate / JPA的新手,并且在使用所有这些注释理解JPA持久性时遇到了一些问题。我有2个简单的实体,在2和I之间有OneToMany / ManyToOne关系,我不明白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个实体链接在一起,所以当我从一个添加/删除时,另一个更新。

但是当我通过DeviceEntity添加警报时,警报实体会更新,但是当我通过警报实体添加警报时,设备实体不会更新。它是否正确?我错过了什么吗?如果是这种情况,那么建立警报实体和关系有什么意义呢?

- 更新:TL; DR -

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

因此,在上面的示例中,如果我创建一个新的AlertEntity并设置DeviceEntity字段,当我说DeviceEntity.getAlerts()时,我的Set内部是否会在DeviceEntity中提供此警报?

0 个答案:

没有答案