【发布时间】:2023-01-11 11:11:53
【问题描述】:
我有两个实体 BookingLegEntity 和 BookingEntity 相互引用。但无论何时我尝试从数据库中检索它们(例如通过 findByUuid),BookingLegEntity.belongsTo 仍然为空。
这是我的实体:
@Entity
@Table(name = "BOOKING_LEG")
@SQLDelete(sql = "UPDATE BOOKING_LEG SET deleted = true WHERE id=?")
@Where(clause = "deleted=false")
public class BookingLegEntity {
@Id
@Column(name = "ID", unique = true, updatable = false)
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Column(name = "UUID", nullable = false)
private UUID uuid;
@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name = "BELONGS_TO")
private BookingEntity belongsTo;
// ..
@ManyToOne
@JoinColumn(name = "DISTRIBUTOR")
private DistributorEntity distributor;
@Column(name = "TRANSPORT_TYPE")
@Convert(converter = TripTypeEnumConverter.class)
private TripTypeEnum transportType;
// ...
}
@Entity
@Table(name="BOOKINGS")
@SQLDelete(sql = "UPDATE BOOKINGS SET deleted = true WHERE id=?")
@Where(clause = "deleted=false")
public class BookingEntity {
@Id
@Column(name="ID", unique=true, updatable = false)
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Column(name="BOOKING_ID")
@Convert(converter = BookingIdConverter.class)
private BookingId bookingId;
@ManyToOne
@JoinColumn(name ="BOOKED_BY")
private UserEntity bookedBy;
// ..
@OneToMany(mappedBy = "belongsTo", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
private Set<BookingLegEntity> bookingLegs = new HashSet<>();
// ...
}
这是我的存储库:
@Repository
public interface BookingLegRepository extends JpaRepository<BookingLegEntity, Long> {
Optional<BookingLegEntity> findByUuid(UUID id);
// ...
}
数据库本身的值看起来是正确的:
真正奇怪的是,这之前有效(belongsTo 不为空)但突然停止工作。有谁知道我们在这里可能做错了什么?
【问题讨论】:
-
你不应该在
@ManyToOne上使用cascade = CascadeType.ALL,因为删除一个BookingLeg会导致删除整个Booking,尝试删除这个级联
标签: java spring database hibernate jpa