Как выполнить мягкое удаление с @EmbeddedId в Hibernate Java? - PullRequest
0 голосов
/ 17 июня 2019

Я не могу выполнить мягкое удаление с @EmbeddedId? Sql в @SQLDelete не выполняется.

Я попытался жестко закодировать значение двух идентификаторов, чтобы создать встроенный идентификатор.

Я могу получить работу по мягкому удалению для сущностей с помощью только @Id, а не @ EmbeddedId

Когда я запускаю тест с удалением для сущностей с @Id, я вижу, что sql выполняется на консоли, но не с @ EmbeddedId.

Я думаю, что он просто обходит @SQLDelete и использует стандартное удаление sql из hibernate. Я ожидаю, что sql внутри @SQLDelete выполняется.

@Data
@EqualsAndHashCode(exclude = "serviceEmployeeIdentity", callSuper = true)
@Entity
@Audited
@Table(name = "service_employee")
@SQLDelete(sql = "UPDATE service_employee " +
    "SET deleted = true " +
    "WHERE service_employee.service_id = ?1 " +
    "AND service_employee.employee_b_number = ?2")
@Where(clause = "deleted = false")
public class ServiceEmployee extends Auditable implements Serializable {

    @EmbeddedId
    private ServiceEmployeeIdentity serviceEmployeeIdentity;

    @Column(name = "critical")
    private Boolean critical;

    @Column(name = "critical_rationale")
    private String criticalRationale;
}

@Repository
public interface ServiceEmployeeRepository extends 
JpaRepository<ServiceEmployee, ServiceEmployeeIdentity> {}

// test
ServiceEmployee serviceEmployee = ServiceEmployeeBuilder.aServiceEmployee();
serviceEmployeeService.deleteById(
    serviceEmployee.getServiceEmployeeIdentity());

Примечание: serviceEmployee имеет встроенный идентификатор serviceEmployeeService просто вызывает класс репозитория

1 Ответ

0 голосов
/ 19 июня 2019

Это будет работать так же, как если бы это был столбец с аннотацией @Id с одним значением.Вам просто нужно указать несколько столбцов в порядке их представления во встроенном классе, поэтому используйте это в вашем @SQLDelete:

UPDATE service_employee
   SET deleted = true
 WHERE service_id = ?
   AND employee_b_number = ?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...