即使被保存对象中的字段不为空,Hibernate也会插入空



我正面临一个奇怪的问题,即使所有字段都设置在java对象中,当我保存对象hibernate试图在字段中插入空值。

当我进一步调试时,我看到在这行合并新实体时,hibernate生成一个空对象并将其设置为目标,而不是将给定实体设置为目标。这将导致插入查询的值为空。

我在这里错过了一些配置吗?下面是具有与我的案例类似的关联的示例实体。

class Vehicle {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(nullable = false)
@Enumerated(EnumType.STRING)
@EqualsAndHashCode.Include
private VehicleType vehicleType;
@OneToOne(mappedBy="vehicle", fetch=FetchType.LAZY)
private Car car;
@OneToOne(mappedBy="vehicle", fetch=FetchType.LAZY)
private Truck truck;
}
class Car {
@Id
private Integer id;

@OneToOne(fetch = FetchType.LAZY, optional = false)
@MapsId
@JoinColumn(name = "vehicle_id")
private Vehicle vehicle;
...
}
class Truck {
@Id
private Integer id;

@OneToOne(fetch = FetchType.LAZY, optional = false)
@MapsId
@JoinColumn(name = "vehicle_id")
private Vehicle vehicle;
...
}

我遇到了同样的问题,在我的情况下,我有一个应用程序:

public class Claim extends BaseEntity<Integer> implements Serializable {

@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "claimdetailsid", referencedColumnName = "id")
private ClaimDetails claimDetails;

@OneToOne(cascade = CascadeType.PERSIST)
@JoinColumn(name = "beneficiaryid", referencedColumnName = "id")
private Beneficiary beneficiary;
....
}

当我保存Claim实体时,Claim和ClaimDetails对象被正确插入。其他实体的所有字段都为空,除了id和创建日期。

我尝试改变cascade类型。持久化到cascade类型。所有这些都解决了插入问题。

但是delete级联现在不起作用

最新更新