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 将 carrierId 和 driverId 发给我。我做到了:
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
如何避免对数据库进行不必要的查询? 我有带有两个嵌套实体的 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 将 carrierId 和 driverId 发给我。我做到了:
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