Java JPA 只写嵌套实体的 ID

Java JPA write only ID for nested entity

如何避免对数据库进行不必要的查询? 我有带有两个嵌套实体的 LoadEntity - CarrierEntity 和 DriverEntity。 Java class:

@Entity
public class LoadEntity {
  ...
  
  @ManyToOne
  @JoinColumn(name="carrier_id", nullable=false)
  private CarrierEntity carrierEntity;

  @ManyToOne
  @JoinColumn(name="driver_id", nullable=false)
  private DriverEntity driverEntity;
}

但是 API 将 carrierIddriverId 发给我。我做到了:

DriverEntity driverEntity = driverService.getDriverEntityById(request.getDriverId());
loadEntity.setDriverEntity(driverEntity);
loadRepository.save(loadEntity);

如何使用 JPA 只编写 driverId?

使用 Spring Data JPA,您始终可以退回到普通 SQL。 当然,这将回避 JPA 为您提供的所有 great/annoying 逻辑。 这意味着您不会收到任何事件,并且内存中的实体可能与数据库不同步。 出于这个原因,如果您使用乐观锁定,您还可以增加版本列。

那是说您可以像这样更新 sing 字段:

interface LoadRepository extends CrudRepository<LoadEntity, Long> {

    @Query(query="update load_entity set driver_id = :driverId where carrier_id=:carrier_id", nativeQuery=true)
    @Modifying
    void updateDriverId(Long carrierId, Long driverId);

}

如果你只是想避免加载 DriverEntity 你也可以使用 JpaRepository.getById