2014-01-06 43 views
2

是否可以使用實體的唯一屬性刪除實體?在Spring中,數據是否可以使用實體的唯一屬性刪除實體?

在Spring Data 1.4.3.RELEASE中,添加方法以通過唯一屬性查找非常容易,但是,我還沒有找到使用delete進行操作的方法。

在以下代碼中,Spring自動處理findByAddress是否有類似的刪除?
類似於void deleteByAddress(String hwAddress);,我已將它添加到TerminalRepository,但它不起作用。

public Terminal { 
@Id 
@GeneratedValue(strategy=GenerationType.AUTO) 
private long id; 
@Column(unique=true) 
private String hwAddress; 
... 
} 


public interface TerminalRepository extends 
    CrudRepository<Terminal, Long> { 

Terminal findByAddress(String hwAddress); 

} 

當然有可能通過address找到實體然後使用delete(Terminal)方法傳遞發現實體作爲參數。但是這在性能方面並不好,因爲它會對數據庫數據庫進行一次不必要的調用,即一次可避免的調用找到對象,另一次調用刪除它

回答

0

我不認爲有任何東西內置的。你必須使用自定義的方法支持推出自己的:

http://docs.spring.io/spring-data/jpa/docs/1.4.3.RELEASE/reference/html/repositories.html#repositories.custom-implementations

+0

謝謝。 這將是很好的內置支持從刪除。任何線索爲什麼沒有這種支持? – user454322

+0

我不知道。奧利弗吉爾克在這裏(StackOverflow),所以如果他看到這個,他可能會回答。一個想法是,你可以簡單地創建一個只有ID集的虛擬實體,然後將其傳遞給delete方法。我敢打賭,它只是使用該ID調用刪除。 (你可以打開Hibernate show SQL來驗證。)如果我是對的,那麼它只是一個單一的刪除調用。 –

0

我面臨同樣的問題。但是,當我在存儲庫接口中使用@Modifying註釋方法時,它開始工作。但是,我不知道它是如何開始工作的。有人可以解釋嗎?

+0

請詳細說明 – user454322

+0

在Spring數據中,我們只是定義了接口中的方法,並且此接口擴展了標準Spring數據存儲庫接口之一。在此界面中,嘗試通過@Modifying註釋您的方法。我不知道爲什麼,但是在把這個註解之後,它停止拋出異常並開始工作。 –

+0

不工作。我將不得不專門編寫一個刪除查詢。在'deleteBy'方法上放置'@ Modifying'不起作用。 – sinu

相關問題