Ich habe eine Feder 4 App, wo ich versuche, eine Instanz einer Entität aus meiner Datenbank zu löschen. Ich habe die folgende Einheit:Löschen funktioniert nicht mit JpaRepository
@Entity
public class Token implements Serializable {
@Id
@SequenceGenerator(name = "seqToken", sequenceName = "SEQ_TOKEN", initialValue = 500, allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seqToken")
@Column(name = "TOKEN_ID", nullable = false, precision = 19, scale = 0)
private Long id;
@NotNull
@Column(name = "VALUE", unique = true)
private String value;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "USER_ACCOUNT_ID", nullable = false)
private UserAccount userAccount;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "EXPIRES", length = 11)
private Date expires;
...
// getters and setters omitted to keep it simple
}
Ich habe eine JpaRepository Schnittstelle definiert:
public interface TokenRepository extends JpaRepository<Token, Long> {
Token findByValue(@Param("value") String value);
}
ich einen Unit-Test-Setup haben, die mit einer In-Memory-Datenbank (H2) arbeitet, und ich bin vor dem Befüllen des Datenbank mit zwei Tokens:
@Test
public void testDeleteToken() {
assertThat(tokenRepository.findAll().size(), is(2));
Token deleted = tokenRepository.findOne(1L);
tokenRepository.delete(deleted);
tokenRepository.flush();
assertThat(tokenRepository.findAll().size(), is(1));
}
Die erste Behauptung passiert, die zweite fehlschlägt. Ich habe einen anderen Test ausprobiert, der den Token-Wert ändert und in der Datenbank speichert, und es funktioniert tatsächlich, daher bin ich mir nicht sicher, warum das Löschen nicht funktioniert. Es werden auch keine Ausnahmen ausgelöst, sondern nur die Datenbank. Es funktioniert auch nicht gegen meine Oracle-Datenbank.
bearbeiten
Immer noch dieses Problem. Ich konnte das Löschen erhalten, indem das Hinzufügen dieser zu meiner TokenRepository Schnittstelle zur Datenbank beharren:
@Modifying
@Query("delete from Token t where t.id = ?1")
void delete(Long entityId);
aber dies keine ideale Lösung ist. Irgendwelche Ideen, was ich tun muss, damit es ohne diese zusätzliche Methode funktioniert?
Ich glaube nicht, dass das Problem hier ist, weil, wenn ich den Test mit Testdaten Saatgut ich die Angabe der ID 1. –