我正面临一个奇怪的问题,即使所有字段都设置在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级联现在不起作用