我有一個春季4應用程序,我試圖從我的數據庫中刪除一個實體的實例。我有以下實體:刪除不使用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
}
我有一個JpaRepository接口定義:
public interface TokenRepository extends JpaRepository<Token, Long> {
Token findByValue(@Param("value") String value);
}
我有一個單元測試設置在存儲器數據庫(H2)與工作和我預填充帶有兩個令牌的數據庫:
@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));
}
第一個斷言通過,第二個斷言失敗。我嘗試了另一個測試,它改變了令牌值並將其保存到數據庫中,並且確實可以工作,所以我不確定爲什麼delete不起作用。它不會拋出任何異常,只是不會將其保存到數據庫中。它對我的oracle數據庫也不起作用。
編輯
仍然有這個問題。我能加入這個我TokenRepository接口獲取刪除堅持到數據庫:
@Modifying
@Query("delete from Token t where t.id = ?1")
void delete(Long entityId);
然而,這不是一個理想的解決方案。任何想法,我需要做什麼才能使它沒有這種額外的方法工作?
我不認爲這是這裏的問題,因爲當我播種用測試數據測試,我指定ID爲1 –